【Memcache】Learning From Memcache

1. 内存存储:

  Memcache使用Slab Allocaiton内存存储机制:

  通常的内存管理方式,对所有记录进行简单的malloc和free会导致内存碎片,所以像Windows将内存分块(chunk), 每个chunk128bype。Memcache将分配的内存分割成各种尺寸的chunk,并把尺寸相同的块分组(chunk的集合)。分配到的内存不会释放,而是重复利用。

 

  • 在Slab中缓存记录的原理:memcached根据收到的数据的大小,选择最适合数据大小的slab。memcached中保存着Slab内空闲chunk的列表,根据该列表选择chunk,然后将数据缓存于其中
  • 存在的问题:由于分配的是特定长度的内存,因此无法有效利用分配的内存,例如将100字节的数据缓存到128字节的chunk中,剩余的28字节就浪费了。
  • 解决之道:使用Growth Factor进行调优 
  • 使用Growth Factor进行调优:memcached在启动时指定Growth Factor因子(通过-f选项),就可以再某种程度上控制slab之间的差异。默认值为1.25。在该选项出现之前,这个因子曾经是2,称为‘power of 2’,但可以看出在128字节之后,差别比较大。为了尽量减少浪费,所以有了Growth Factor。
  • Lazy Expiration:memcached内部不会监视记录是否过期,而是在get时查看记录的Timestamp, 检查记录是否过期,这种技术被称为lazy expiration。所以,memcached不会再过期监视上耗费CPU时间。【在以后的开发中也可以使用这样的技术,不加大cup的消耗】
  • LRU: 从缓存中有效删除数据的原理:memcached会优先使用已超时的记录的控件,但实际如此,也会发生追加新记录时控件不足的情况,此时就要使用LRU机制来分配空间。当memcached的内存空间不足时,就从最近未被使用的记录中搜索,并将空间分配给新的记录

    

posted @   Zhentiw  阅读(155)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示