Redis缓存淘汰策略

发布时间 2023-11-16 21:25:23作者: kiper

八个淘汰策略

  • volatile-random
  • volatile-lru
  • volatile-lfu
  • volatile-ttl
  • noeviction
  • allkeys-lru
  • allkeys-random
  • allkeys-lfu

lru

标准LRU算法是由双向链表及Hash表实现,具体代码实现可以参考LRU算法

Redis中的LRU算法实现有所变化:

  1. Reids没有使用双向链表维护数据页的访问顺序,只使用了全局哈希表缓存数据
  2. 随机抽取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