1、什么是Memcached

Memcached是一个开源的高性能,分布式的内存对象缓存系统,通过键值队的形式来对数据进行存取,Memcached是简单而强大,它的简单设计促进快速部署,易于开发,解决了大数据缓存面临的许多问题。
 
2、memcached的协议与数据存取
所谓协议,可以理解为对其操作(数据存取)的语法规则,存取数据的常用命令和参数如下:
set:存入一条记录;
key:记录的键值;
flags:十进制的int,标识存储记录时的客户端标志,在记录取出时会返回;
exptim:数据的过期时间,0表示不过期,其他数值则表示有效的毫秒数,在过期后,客户端将取不到这条记录,memcached中的过期记录会被清空或删除;
get:表示从memcached取出key对应的值,如果没有对应的值则返回结束标志END;
append:表示对key所对应的值在最后再加入输入的内容;
delete:删除key对应的值;
flush:清空所有记录值
更多协议可参考:memcached包中所带的protocol.txt
 
3、Memcached一些特性和限制
3.1、在 Memcached 中可以保存的item数据量是没有限制的,只有内存足够;
3.2、Memcached 单进程最大使用内存为 2G,要使用更多内存,可以分多个端口开启多个Memcached进程;
3.3、最大30天的数据过期时间,设置为永久的也会在这个时间过期,常量REALTIME_MAXDELTA 60 * 60 *24 *30控制;
3.4、最大键长为250字节,大于该长度无法存储,常量KEY_MAX_LENGTH 250 控制;
3.5、单个item最大数据是1MB,超过1MB数据不予存储,常量POWER_BLOCK 1048576 进行控制,它是默认的slab大小;
3.6、最大同时连接数是200,通过conn_init()中的freetotal进行控制,最大软连接数是1024,通过 settings.maxconns=1024进行控制;
3.7、跟空间占用相关的参数:settings.factor=1.25,settings.chunk_size=48,影响slab的数据占用和步进方式;
3.8、关于Memcached的使用,应当在需要的情况下才使用Memcached,比如需要实现分布式缓存系统,否则如果是类似单台缓存服务器,那么建议最好不要用Memcached,改用其他缓存系统。
 
4、关于利用SHELL操作Memcached的一些实例:
4.1、将数据写入Memcache
#key=chinatree,value=123456
printf "set chinatree 0 0 6\r\n123456\r\n" | nc 127.0.0.1 12345
STORED
#需要注意的是:在set时如果指定的字符长度,而输入的内容超过了这个长度,那么就会报错:CLIENT_ERROR bad data chunk
 
4.2、数据取回
#key=chinatree
printf "get chinatree\r\n" | nc 127.0.0.1 12345
VALUE chinatree 0 6
123456
END
#需要注意的是,取值时如果key不存在,返回END标志
printf "get tree\r\n" | nc 127.0.0.1 12345
END
 
4.3、数值增加1
#key=chinatree,并且value为正整数
printf "incr chinatree 1\r\n" | nc 127.0.0.1 12345
123457
#需要注意的是,取值时如果key不存在,返回NOT_FOUND
printf "incr tree 1\r\n" | nc 127.0.0.1 12345
NOT_FOUND
 
4.4、数值减少1
#key=chinatree,并且value为正整数
printf "decr chinatree 1\r\n" | nc 127.0.0.1 12345
123456
#需要注意的是,取值时如果key不存在,返回NOT_FOUND
printf "decr tree 1\r\n" | nc 127.0.0.1 12345
NOT_FOUND
 
4.5、数据删除(假设key为zhangyan)
printf "delete chinatree\r\n" | nc 127.0.0.1 12345
DELETED
#需要注意的是,取值时如果key不存在,返回NOT_FOUND
printf "delete tree\r\n" | nc 127.0.0.1 12345
NOT_FOUND
 
4.6、查看Memcached状态
printf "stats\r\n" | nc 127.0.0.1 12345
STAT pid 20955
STAT uptime 9
STAT time 1319600685
STAT version 1.4.4
STAT pointer_size 32
STAT rusage_user 0.000000
STAT rusage_system 0.000999
STAT curr_connections 5
STAT total_connections 6
STAT connection_structures 6
STAT cmd_get 0
STAT cmd_set 0
STAT cmd_flush 0
STAT get_hits 0
STAT get_misses 0
STAT delete_misses 0
STAT delete_hits 0
STAT incr_misses 0
STAT incr_hits 0
STAT decr_misses 0
STAT decr_hits 0
STAT cas_misses 0
STAT cas_hits 0
STAT cas_badval 0
STAT auth_cmds 0
STAT auth_errors 0
STAT bytes_read 7
STAT bytes_written 0
STAT limit_maxbytes 2147483648
STAT accepting_conns 1
STAT listen_disabled_num 0
STAT threads 4
STAT conn_yields 0
STAT bytes 0
STAT curr_items 0
STAT total_items 0
STAT evictions 0
END
 
4.7、模拟top命令,查看Memcached状态:
watch "printf 'stats\r\n' | nc 127.0.0.1 12345"
或者
watch "echo stats | nc 127.0.0.1 12345"
 
4.8、清空Memcache
printf "flush_all\r\n" | nc 127.0.0.1 12345
OK
 
更详细Memcached操作,可参见官网http://www.memcached.org.