首页   快速返回

memcached知识点整理     所属分类 memcached
LRU(Least Recently Used,最近最少使用) 
可设置过期时间


基于文本协议 可通过telnet读写数据
基于libevent事件处理 BSD系统的kqueue,Linux系统的epoll 封装
内置的内存管理方式 
非持久化,重启数据会丢失
分布式集群,客户端处理

启动
/usr/local/memcached/bin/memcached –p 11211 –d –u root –P /tmp/memcached.pid

-p  端口 默认11211 
-d 后台启动一个守护进程(daemon) 
-u 指定用户启动  
-P 进程的pid文件
-l 设置监听IP 默认监听所有IP 
-m  内存大小,以MB为单位,默认为64M 
-c  最大并发连接数,默认1024 
-f 块大小增长因子 默认是1.25 
-M 内存耗尽时返回错误, 不用LRU算法 


常用命令
set  添加或更新 
add  不存时添加数据,否则返回NOT_STORED 
replace 存在时替换,否则返回NOT_STORED
cas 更新存在值 ,还带了检查功能 
append  尾部追加  key需要存在 否则返回 NOT_STORED
prepend 头部追加 key不存在,返回NOT_STORED
delete  DELETED NOT_FOUND
incr 与 decr 命令
stats 监控



key 不存在返回 NOT_FOUND,如果键的值不为数字,返回 CLIENT_ERROR,其他错误返回 ERROR
incr key increment_value
decr key decrement_value

set key1 0 0 5
hello
     
值的长度一定要正确,否则失败

get key1 


telnet 127.0.0.1 11211

set key1 0 0 5
hello
STORED
get key1
VALUE key1 0 5
hello
END

gets 返回token  最后一个数字 4

gets key1
VALUE key1 0 6 4
hello1
END
cas key1 0 0 6 4
hello2
STORED
gets key1
VALUE key1 0 6 5
hello2
END

cas key flags exptime bytes unique_cas_token

cas命令使用步骤

如果没有设置唯一令牌,则 CAS 命令执行错误。
如果键 key 不存在,执行失败。
添加键值对。
通过 gets 命令获取唯一令牌。
使用 cas 命令更新数据

ERROR      缺少 token 
NOT_FOUND  key不存在


内存分配机制

使用slab allocation机制来分配和管理内存
按照预先规定的大小,将分配的内存分割成特定长度的内存块,再把尺寸相同的内存块分成组,
数据在存放时,根据键值 大小去匹配slab大小,找就近的slab存放,所以存在空间浪费现象。

传统的内存管理方式,malloc分配内存,free回收内存,这种方式容易产生内存碎片





缓存淘汰策略 
LRU + 过期时间设置  
内存满时 失效的数据先被替换 然后是最近未使用的数据
Lazy Expiration 自己不会监控存入的key是否过期  读取时检查是否过期

分布式算法

余数 散列  
一致性hash  Consistent Hashing Algorithm
hash 环    节点 和 数据 hash 
顺时钟方向查找 
良好的分布式cahce系统中的一致性hash算法应该满足以下几个方面:
平衡性(Balance) 单调性(Monotonicity) 分散性(Spread) 平滑性(Smoothness)
扩容 锁容 数据迁移

虚拟节点 



监控 
stats
watch

清空统计数据 stats reset
stats slabs

flush_all

使所有item失效。加入参数则表示在N秒后失效所有item。
这项操作会立即返回,不会暂停服务器。
这个操作并不会真的释放内存空间,而是标志所有的item为失效

上一篇     下一篇
jdk jcmd 使用

mysql知识点整理

架构师需要具备的能力和素质

A 股 的 真 相

10 Golden rules of doing business in China

java web项目中获取重要的请求信息