八个淘汰策略
- volatile-random
- volatile-lru
- volatile-lfu
- volatile-ttl
- noeviction
- allkeys-lru
- allkeys-random
- allkeys-lfu
lru
标准LRU算法是由双向链表及Hash表实现,具体代码实现可以参考LRU算法
Redis中的LRU算法实现有所变化:
- Reids没有使用双向链表维护数据页的访问顺序,只使用了全局哈希表缓存数据
- 随机抽取N个数据,通过redisObject结构体中的lru值,取出最小的值进行淘汰。
#define LRU_BITS 24 typedef struct redisObject { unsigned type:4; unsigned encoding:4; unsigned lru:LRU_BITS; /* LRU time (relative to global lru_clock) or * LFU data (least significant 8 bits frequency * and most significant 16 bits access time). */ int refcount; void *ptr; } robj;
## 优点
没有严格按照最近最久未使用来进行淘汰,但是采用随机及lru思想,节省了大量的指针内存及调整操作时间,更多地考虑了空间及性能的优化。
# lfu
标签:缓存,Redis,unsigned,lru,allkeys,LRU,淘汰,volatile
From: https://www.cnblogs.com/kiper/p/17837220.html