Memcached知识点
概念
Memcached是一个免费开源的,高性能的,具有分布式对象的缓存系统,它可以用来保存一些经常存取的对象或数据,保存的数据像一张巨大的HASH表,该表以Key-value对的方式存在内存中。
流程
检查客户端请求是否在memcached中
若有则直接返回
若无则从数据库查询后返回,并存储到memcached中
数据库更新需要同时更新memcached,保证一致性
memcached内存用完后会使用LRU策略加上到期失效策略,首先替换到期失效数据,之后替换最近未使用过的数据
缓存置换算法(页面置换算法)FIFO/ LFU/ LRU
- FIFO 先进先出,最先进入缓存的最先替换掉
- LFU 最近最少使用,替换掉最近一段时间使用次数最少的数据
- LRU 最近最久未使用使用,替换掉最近一段时间没使用过的,以最近一次使用时间为基准,替换最远的数据空间
特征
协议简单:基于文本行的协议,直接通过telnet在memcached服务器上可进行存取数据操作
Telnet 远程连接服务,作用于tcp/ip协议的应用层
基于libevent事件处理:libevent是一套利用C开发的程序库,由事件驱动,跨平台,支持并发编程
- 内置的内存管理方式:所有数据存于内存,LRU算法替换,数据易失
- 分布式:分布式取决于memcache客户端,memcached服务器之间互不通信,数据独立存储
启动
服务启动方法
/usr/local/memcached/bin/memcached –p 11211 –d –u root –P /tmp/memcached.pid
1 | telnet 127.0.0.1 11211 # 远程连接memcached |
算法
- 内存分配:Slab allocation机制分配和管理,先按照预定的大小,将分配的内存分割成特定长度的内存块chunck,然后再把相同的内存块分成组slab,根据值的大小去匹配slab大小,找就近的slab存放
- 缓存策略:失效策略 + LRU;不会监控存入的key/value是否过期,而是获取key时去查看记录的时间戳,检查key/value是否过期
- 分布式算法:memcached本身不存在分布式,而是客户端进行分布式选择memcached服务器进行分布式存储,因此只考虑服务器选择算法
- 余数算法:求得key的整数散列值,然后根据服务器台数求的余数进行服务器选择;但是服务器的增减都会导致缓存失效
- 散列算法:首先将服务器散列值映射到0~2^32^编号的圆上,然后找到从key的散列值开始的第一个圆点作为目标服务器;当从中间插入服务器时,只有第一个服务器逆时针算的第一个服务器会受影响;减少服务器时,只有所减少服务器的逆时针方向第一个服务器之间的数据会受影响