1、memcached介绍
Memcached是一个自由开源的,高性能,分布式内存对象缓存系统。
Memcached是以LiveJournal旗下Danga Interactive公司的Brad Fitzpatric为首开发的一款软件。现在已成为mixi、hatena、Facebook、Vox、LiveJournal等众多服务中提高Web应用扩展性的重要因素。
Memcached是一种基于内存的key-value存储,用来存储小块的任意数据(字符串、对象)。这些数据可以是数据库调用、API调用或者是页面渲染的结果。
Memcached简洁而强大。它的简洁设计便于快速开发,减轻开发难度,解决了大数据量缓存的很多问题。它的API兼容大部分流行的开发语言。
本质上,它是一个简洁的key-value存储系统。
一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。
memcached分布式缓存服务器的特点:协议简单、基于libevent的事件处理、内置内存存储方式、memcached不互相通信的分布式
2、Memcached安装和基本使用
Memcached 支持许多平台:Linux、FreeBSD、Solaris、Mac OS,也可以安装在Windows上。
linux系统安装memcached首先要安装Libevent库:
sudo apt-get install libevent libevent-deve 自动下载安装(Ubuntu/Debian) yum install libevent libevent-deve 自动下载安装(Redhat/Fedora/Centos)
安装memcached:
sudo apt-get install memcached #ubuntu/debian yum install memcached #redhat/fedora/centos portmaster databases/memcached #freeBSD
memcached命令的运行:
$ /usr/local/memcached/bin/memcached -h #获得帮助
如果使用自动安装memcached命令位于/usr/local/bin/memcached。
启动选项:
-d:启动一个守护进程
-m:分配给memcached使用的内存数量,单位是MB
-u:运行memcached的用户
-l:监听的服务器IP地址,可以由多个地址
-p:设置memcached监听的端口,最好是1024以上
-c:最大运行的并发链接数,默认1024
-P:设置保存memcached的PID文件
[root@python bin]# memcached -d -m 1024 -u nobody -l 192.168.146.129 -p 11211 -c 2048 -P /tmp/memcached.pid [root@python bin]# netstat -lntup|grep 11211 tcp 0 0 192.168.146.129:11211 0.0.0.0:* LISTEN 42059/memcached udp 0 0 192.168.146.129:11211 0.0.0.0:* 42059/memcached
3、python操作memcached
import memcache #链接memcached服务器,指定IP和端口,debug表示显示错误信息 mc = memcache.Client([‘192.168.146.129:11211‘],debug=True) #设置键值对 mc.set(‘foo‘,‘pythonTomemcache‘) #查看键值 print(mc.get(‘foo‘))
add:添加一个键值对,如果存在key,重复执行add则异常
mc.add(‘k1‘,‘v1‘)
replace: 修改某个key的值,如果key不存在,则异常
mc.replace(‘k2‘,‘v2‘)
set:设置一个键值对,如果key不存在,则创建,如果key存在则修改
mc.set(‘k3‘,‘v3‘)
set_multi:设置多个键值对,如果key不存在,则创建,如果key存在,则修改
mc.set_multi({‘key1‘:‘value1‘,‘key2‘:‘value2‘})
delete:在memcached中删除指定的一个键值对
mc.delete(‘key1‘)
delete_multi:在memcached中删除指定的多个键值对
mc.delete_multi([‘key1‘,‘key2‘,‘key3‘])
get:获取一个键值对
get_multi:获取多个键值对
mc.get(‘key3‘) mc.get_multi([‘key1‘,‘key2‘])
append:修改指定key的值,在该值后面追加内容
prepend:修改指定key的值,在该值前面插入内容
mc.append(‘k1‘,‘after‘) mc.prepend(‘k2‘,‘before‘)
incr:自增,将memcached中的某个值增加N(默认为1)
decr:自减,将memcached中的某分值减少N(默认为1)
mc.set(‘k1‘,10) mc.incr(‘k1‘,2) print(mc.get(‘k1‘)) mc.decr(‘k1‘,3) print(mc.get(‘k1‘))
gets:gets 命令获取带有 CAS 令牌存 的 value(数据值) ,如果 key 不存在,则返回空
cas:执行一个检查并设置的操作,它仅在当前客户端最后一次取值后,该Key对应的值没有被其他客户端修改的情况下, 才能够将值写入。
mc.cas(‘key5‘,‘999‘) print(mc.gets(‘key5‘))
------------------------------------------------------------