memcached实战系列(七)理解Memcached的数据过期方式、新建过程、查找过程

时间:2023-01-20 20:46:15

1.1.1. 新建Item分配内存过程

1:快速定位slab classid,先计算Item长度

key键长+flag+suffix(16字节)+value值长+结构大小(32字节),如90byte

如果>1MB,无法存储丢弃

取最小冗余的slab class

如:有48,96,120,存90会选择96

 

1.1.2. 按顺序寻找可用chunk顺序

(1)slot:检查slab回收空间slot里是否有剩余chunk

delete:delete时标记到slot

exptime:get时检查的过期对象标记到slot

(2)end_page_ptr:检查page中是否有剩余chunk

(3)memory:内存还有剩余空间可以用于开辟新的slab

(4)LRU

Memcached的数据存储方式的缺点

由于chunk的大小是预先分配好的特定长度,因此如果数据不能完全填满

chunk,那么剩余的空间就浪费了

1.1.3.  Lazy Expiration(延迟/惰性 过期)

Memcached不会监控记录是否过期,而是在外部来获取数据的时候,才检查记录的时间戳,因此称为Lazy Expiration

 LRULeast Recently Used最近最少使用)

当空间不足的时候,Memcached会优先使用已经过期的数据空间,如果还不够,那么就会把最近最少使用的对象的空间释放出来使用。

 懒惰删除机制

删除item对象时,不释放内存,作删除标记,指针放入slot回收插槽,下次分配的时候直接使用要特别注意:MemcachedLRU不是全局的,而是针对slab的,可以说是区域性的

每个slab进行lru