【Memcache】Learning From Memcache
from learning memcache
2023-09-14 08:59:22 时间
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的内存空间不足时,就从最近未被使用的记录中搜索,并将空间分配给新的记录。
相关文章
- django 简易博客开发 3 静态文件、from 应用与自定义
- from urllib.parse import urlparse 使用
- [Typescript] Extract the Discriminator from a Discriminated Union
- [Typescript] Using 'Pick' to create a sub-type from original type
- [Typescript] Inferring Literal Types from any Basic Type
- [Recompose] Stream a React Component from an Ajax Request with RxJS
- 【Memcache】Learning From Memcache
- SAP CRM WebClient UI F2页面里from pre-processing table标签位的含义
- Atitit table的读取解析from html by jsoup java html paresr 目录 1. atitit.gui控件的定位与选择器1 2. 读取表格流程 遍历表格ta
- Android Studio — Could not determine java version from ‘11.0.8‘. The project uses Gradle version wh
- 成功解决ERROR: Could not find a version that satisfies the requirement xgboost (from versions: none) ERR
- [DEEP LEARNING An MIT Press book in preparation]Deep Learning for AI
- 不平衡学习 Learning from Imbalanced Data
- 完美解决导入from PIL import image出现错误的问题
- 【Transformer】23、SETR:Rethinking Semantic Segmentation from a Seq-to-Seq Perspective with Transformer