Memcached特点
- 协议简单,基于文本行的协议
- 基于Libevent的时间处理
- 内置内存存储方式
- 分布式缓存服务器(采用一致性哈希算法实现的客户端分布式,而非服务器端的分布式)
内存分配机制 - SlabAllocation
Memcached内存分配
- Linux内置的Malloc()/Free()函数是按需分配内存,释放后若没有恰好相等的内存占用,那么就会产生内存碎片。
- SlabAllocation按预先设定的大小,将内存分割为特定长度的块,以解决内存碎片。
- 内存被分成若干Slab,每个Slab又被分成若干Chunk,相同大小的Chunk被放在同一Slab中。
内存使用机制 - LRU(Least Recently Used)
- 已分配的内存不回收,而是直接重新利用;
- 优先使用已过期的内存;
- 内存不足时采用LRU机制,将长期不用的内存分配给新的记录。
优化思路
- 设置合理的增长因子,控制内存合理消耗;
- 调整缓存更新机制,在快失效时更新内存。