memcache
memcache介绍
memcache概念
Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。
关于存储
为了提高性能,memcached中保存的数据都存储在memcached内置的内存存储空间中,并没有持久化到硬盘。由于数据仅存在于内存中,因此重启memcached、重启操作系统会导致全部数据消失。另外,内容容量达到指定值之后,就基于LRU(Least Recently Used)算法自动删除不使用的缓存。memcached本身是为缓存而设计的服务器,因此并没有过多考虑数据的永久性问题。
memcache安装及使用
Memcached安装:
1 2 3 4 5 6 7 8 | wget http: //memcached.org/latest tar -zxvf memcached- 1 .x.x.tar.gz cd memcached- 1 .x.x ./configure && make && make test && sudo make install PS:依赖libevent yum install libevent-devel apt- get install libevent-dev |
启动memcache:
1 2 3 4 5 6 7 8 9 10 | memcached -d -m 10 -u root -l 10.211 . 55.4 -p 12000 -c 256 -P /tmp/memcached.pid 参数说明: -d 是启动一个守护进程 -m 是分配给Memcache使用的内存数量,单位是MB -u 是运行Memcache的用户 -l 是监听的服务器IP地址 -p 是设置Memcache监听的端口,最好是 1024 以上的端口 -c 选项是最大运行的并发连接数,默认是 1024 ,按照你服务器的负载量来设定 -P 是设置保存Memcache的pid文件 |
memcache命令:
1 2 3 | 存储命令: set /add/replace/append/prepend/cas 获取命令: get /gets 其他命令: delete /stats.. |
可视化工具Memadmin:
用php写的一个管理页面,下载方式 #git clone https://github.com/junstor/memadmin
python-memcache-API
安装API:
1 2 | python操作Memcached使用Python-memcached模块 下载安装:https: //pypi.python.org/pypi/python-memcached |
基本操作:
1 2 3 4 5 6 7 | import memcache mc = memcache.Client([ '192.168.136.8:11211' ], debug = 1 ) #开启debug模式 #server可以是加入weight的tuple:[(ip:port,weight),.....] mc. set ( "foo" , "bar" ) ret = mc.get( 'foo' ) print ret #结果 ==> bar |
memcache和redis的比较
差异:
性能都很高,无大差异;
Redis只使用单核,而Memcached可以使用多核,平均每一个核上Redis在存储小数据时比Memcached性能更高;
简单的key-value存储,Memcached的内存利用率更高,而如果Redis采用hash结构来做key-value存储,由于其组合式的压缩,其内存利用率会高于Memcached,当然,这和你的应用场景和数据特性有关;
Redis相比Memcached来说,拥有更多的数据结构和并支持更丰富的数据操作,通常在 Memcached里,你需要将数据拿到客户端来进行类似的修改再set回去。这大大增加了网络IO的次数和数据体积。在Redis中,这些复杂的操作通 常和一般的GET/SET一样高效。
选型:
存储100k以上用memcache,以下用redis,其实无论你使用哪一个,每秒处理请求的次数都不会成为瓶颈(比如瓶颈可能会在网卡);
需要更多的数据结构和并支持更丰富的数据操作,用redis;
对数据持久化和数据同步有所要求,那么推荐你选择Redis。