Redis内存淘汰策略

Redis内存淘汰策略

内存淘汰策略

Redis配置文件中可以设置maxmemory,即内存的最大使用量,到达设置值时会执行内存淘汰机制。其中,LRU(least recently used)为最近最少用到的,LFU(Least Frequently Used)为最不常用的。

volatile-lru -> 使用 LRU 算法删除过期字典中的key
allkeys-lru -> 根据 LRU 算法删除任意key
volatile-lfu -> 使用 LFU 算法删除过期字典中的key
allkeys-lfu-> 根据 LFU 算法删除任意key
volatile-random -> 随机删除一个过期字典中的key
allkeys-random -> 随机删除一个key
volatile-ttl -> 删除过期时间最近的key
noeviction -> 根本不过期,只在写操作时返回一个错误

注意这里的6种机制,volatile和allkeys规定了是对已设置过期时间的数据集淘汰数据还是从全部数据集淘汰数据,后面的lru、ttl以及random是三种不同的淘汰策略,再加上一种no-enviction永不回收的策略。

选取内存淘汰策略的规则:

  1. 如果数据呈现幂律分布,也就是一部分数据访问频率高,一部分数据访问频率低,则使用allkeys-lru
  2. 如果数据呈现平等分布,也就是所有的数据访问频率都相同,则使用allkeys-random

LRU算法的实现

Redis中的数据整体上是一个大的字典,其每个对象都记有最近访问时间戳。Redis中LRU初始的实现算法很简单,随机从dict中取出五个key,淘汰一个LRU字段值最小的。在3.0的时候,又改进了一版算法,首先第一次随机选取的key都会放入一个pool中(pool的大小为16),pool中的key是按LRU大小顺序排列的。接下来每次随机选取的key的LRU值必须小于pool中最小的LRU才会继续放入,直到将pool放满。放满之后,每次如果有新的key需要放入,需要将pool中LRU最大的一个key取出。淘汰的时候,直接从pool中选取一个LRU最小的值然后将其淘汰。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值