Memcached安装, http://www.cnblogs.com/zgx/archive/2011/08/10/2134097.html
1. memcached是以守候程序的方式运行与一个或者多个服务器,随时等待客户端的链接,通过启动memcache服务器端,配置相应的ip、端口内存大小等参数,客户端可通过指定的服务器端ip,将数据以key-value的方式存储。
2.memcached的两阶段哈希
客户端存取数据是,首先参考节点列表计算出key的哈希值(阶段一哈希),进而选中一个节点,客户端将请求发送给选中的节点,然后Memcached节点通过一个内部的哈希算法(阶段二哈希),进行真正的数据(item)存取
3. Memcache的服务器客户端通信并不适用复杂的xml等格式,而使用简单的基于文本行的协议,因此通过telnet也能在Memcached上保存数据,取得数据。
4.标准协议:memcached所有的标准协议包含在对item执行命令过程中,一个item包含两行:
第一行:key flag expirationTime Bytes
key:key用于查找缓存值
Flags:一个32位的标志值,客户机使用它存储关于键值对的额外信息(一般标识类型)
Expiration time:在缓存中保存键值对的时长(以秒位单位,0表示永远(30天)(关了也 就没了,因为在内存中))
Bytes:在缓存中存储的字节数
第二行:value:存储的值(始于第二行)
add k1 1 0 2
stored
4. noreply:可以在命令的第一行后面加入noreply,以避免在处理交互命令的时候,等待服务端返回
add k3 1 60 2 noreply
11
//没有stored
5. memcached写入值
命令有:set,add,replace,append,prepend,cas
①set:用于向缓存中添加新的键值对,如果键已经存在,则之前的值将被替换
②add:仅当缓存中不存在键时,add命令才会向缓存中添加一个键值对,如果缓存中已经存在键,则之前的值将仍然保持,服务器响应NOT_STORED
③replace:仅当键已经存在时,replace命令才会替换缓存中的键,如果缓存不存在键,服务器响应not_stored
④append:是在现有缓存中数据后追加数据,如果key中没有,则返回not_stored
⑤prepend:前追加
⑥cas(check and set):检查和更新,只有从你读取的数据后,别人没有更新这个数据,才能够正确保存。就是版本控制,通常和gets配合使用,缓存中没有key的话,就会返回not_found
------------------------------- gets k1 value k1 0 4 8 //8指版本号 23 --------------------------------------- cas k1 0 4 7 //7表示版本号,因为最新版本是8,所以修改失败,返回exits 5 exits ----------------------- cas k1 0 4 9 //9表示版本号,因为最新版本是8,只有和最新版本一样才允许修改,修改之后版本号为9,所以修改失败,返回exits 5 exits -----------------------
6. get:获取相关数据 gets:获取数据+版本号
7. 删除命令:delete
delete k1
DELETE
8.incr/decr命令:如果缓存数据中存储的是数字形式的字符串,则可以使用incr/decr 对数据进行递增和递减操作,操作后的值不会为负数。
9. stats命令:查询服务器的运行状态和其他内部数据,包含如下这些:
①pid:服务器进程id
②uptime:服务器运行时间,单位秒
③time:服务器当前unix时间
④version:服务器的版本号
⑤libevent:libevent的版本
⑥pointer_size:服务器操作系统位数
⑦rusage_user:该进程累计的用户时间
⑧rusage_system:该进程累计的系统时间 分析cpu占用是否高
⑨curr_connections:当前连接数
⑩total_connections:服务器启动后总连接数 分析连接数是否过多
⑪connection_structures:服务器分配的连接结构的数量
⑫reserved_fds:内部使用的misc fds数量
⑬cmd_get:获取请求的数量
⑭get_hits:获取成功的总次数,命中次数
⑮get_misses:获取失败的总次数 分析命中率
⑯cmd_set:存储请求数量
⑰cmd_flush:flush请求的数量
⑱cmd_touch:touch请求的数量
⑲delete_misses:删除失败次数
⑳delete_hits:删除命中
⑪bytes:已用缓存空间
⑫bytes_read:总共获取的数据量
⑬bytes_written:总写入数据量 //分析字节数流量,分析空间大小
⑭limit_maxbytes:总允许写入的数据量,和分配的内存有关
⑯accepting_conns:允许的总连接数
⑰curr_items:当前缓存item数量
⑲total_items:从服务启动后,总的存储缓存item的数量
⑳evictions:通过删除item释放内存的次数 分析对象LRU频率
隐含的关系:
1. 缓存命中率:get_hits/cmd_get*100%
2.get_misses的数字加上get_hits应该等于cmd_get
10. stats sizes 命令:输出所有Item的大小和个数,注意:会锁定服务,暂停处理请求
11. flush_all命令:是内存中所有的item失效,不是真正的释放内存,而是标记为失效,加参数,n秒后
12.version,版本
13.stats setting 查看设置
14.stats_item 数据项统计
15.stats slabs 区块统计
16.