Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。
一、Memcached的安装
wget http://memcached.org/latest #下载memcached
yum install -y libevent-devel #解决依赖
tar zxvf memcached-1.4.31.tar.gz
cd memcached-1.4.31
./configure
make && make install
二、启动
memcached -d -m 10 -u root -l 192.168.0.125 -p 12000 -c 256 -P /tmp/memcached.pid
参数说明:
-d 是启动一个守护进程
-m 是分配给Memcache使用的内存数量,单位是MB
-u 是运行Memcache的用户
-l 是监听的服务器IP地址
-p 是设置Memcache监听的端口,最好是1024以上的端口
-c 选项是最大运行的并发连接数,默认是1024,按照你服务器的负载量来设定
-P 是设置保存Memcache的pid文件
ps –aux | grep memcached
netstat –tunpl | grep :12000
telnet 192.168.0.125 12000
stats #统计Memcached的各种信息
memcached -d -m 2048 -p $1 -u root -vv >> /tmp/memcached.log 2>&1 #生成日志文件
memcached启动的shell脚本
1 #!/bin/sh 2 echo "Start to start memcached server $(date)..." 3 4 MEMCACHED=/usr/local/bin/memcached 5 6 usage() 7 { 8 echo "usage: `basename $0` port" 9 } 10 11 if [ -n "$1" ] 12 then 13 { 14 pid=`ps aux|grep memcached|grep "$1" |grep -v grep|awk '{print $2}'` 15 if [ -n "$pid" ] 16 then 17 { 18 sleep 2 19 echo "kill memcached which port is $1 begin" 20 echo "pid:$pid" 21 kill -9 $pid 22 echo "kill memcached which port is $1 end" 23 sleep 2 24 } 25 fi 26 echo "begin to start memcached in port $1" 27 LOG_FILE=/var/log/memcached/memcached_$1.log 28 rm -f $LOG_FILE 29 $MEMCACHED -d -m 2048 -p $1 -u root -vv >> $LOG_FILE 2>&1 30 echo "start memcached end" 31 tail -f $LOG_FILE 32 } 33 else 34 { 35 usage 36 exit 1 37 } 38 fi
./startup.sh 12000
三、memcached的命令
命令格式
- <command name> <key> <flag> <expire> <bytes>
- <data block>
command name 命令名称
key 查找关键字
flag 存储额外信息
expire 数据保存时间,0表示永远,单位秒
bytes 存储数据的字节数
data block 存储的数据
1.set 无论如何都存储,数据不存在时存储,数据存在时更新
set name 0 0 3
abc
STORED
get name
VALUE name 0 3
abc
END
2.add 当数据不存在时存储
3.replace 当数据存在时存储
4.get 可以一个或多个,用空格格开
5.gets 与 get 一样,但会返回多一个数字,这个数字用来检查数据是否被修改过,如修改过,这个数字回改变
6.cas cas即checked and set ,当最后一个参数与gets返回的数字一致时才存储,否则返回EXISTS
7.append 将数据追加到当前缓存数据的之后,当缓存数据存在时才存储
8.delete 删除缓存数据,数据存在返回DELETED,数据不存在返回NOT_FOUND
9.flush_all 将当前所有缓存数据设置为过期,但不会释放内存
10.stats items 执行stats items,可以看到STAT items行,如果memcached存储内容很多,那么这里也会列出很多的STAT items行
11.stats cachedump slabs_id limit_num
slabs_id:由stats items返回的结果(STAT items后面的数字)决定的
limit_num:返回的记录数,0表示返回所有记录
通过stats items、stats cachedump slab_id limit_num配合get命令可以遍历memcached的记录。
12.stats slabs 显示各个slab的信息,包括chunk的大小、数目、使用情况等
13.stats sizes 输出所有item的大小和个数
14.stats reset 清空统计数据
四、通过python使用memcached
1 import memcache 2 mc = memcache.Client(['192.168.0.125:12000'],debug=True) #表示运行出现错误时,显示错误信息,上线后移除该参数 3 mc.set("foo","bar") 4 ret = mc.get("foo") 5 print(ret)
集群的支持
1 #内存中的主机列表为host_list = ["1.1.1.1", "1.1.1.2", "1.1.1.2", "1.1.1.3", ] 2 mc = memcache.Client([('1.1.1.1:12000', 1), ('1.1.1.2:12000', 2), ('1.1.1.3:12000', 1)], debug=True) 3 mc.set('k1', 'v1')
mc.set_multi({'k1': 'v1', 'k2': 'v2'}) #设置多个键值对
mc.delete_multi(['k1', 'k2']) #删除多个键值对
mc.append('k1', 'after') #修改指定key的值,在该值后面追加内容
mc.prepend('k1', 'before') #修改指定key的值,在该值前面插入内容
mc.incr('k1') #自增,默认1
mc.decr('k1') #自减