Redis学习心得—lru算法

什么是lru策略?

lru策略等于命中策略,保留平时访问高的数据,淘汰那些使用不多的数据,为redis解决内存空间不足的问题。

工作流程?

lru算法是根据每个文件的最后一次访问时间,对文件做预测,也就是或同一个文件间隔的访问时间越短,那么就代表当前文件访问量更大,也就是被留中的几率更大,时间越长,恰好相反。

lru配置核心参数;

maxmemory:指定redis存储数据时消耗内存大小,比如200m,当数据消耗内存达到此值时,触发数据淘汰,为0时,表示对数据消耗内存不做限制,也代表者lru功能失效,64位系统默认值为0,32位系统默认值位3GB。 例如:maxmemory 200M
maxmemory_policy:触发数据后的淘汰策略,也就是数据消耗内存达到maxmemory指定值后,将触发对应的淘汰策略(几种淘汰策略见下文),后面接淘汰策略。 例如:maxmemory_policy volatie-lru
maxmemory_sample:随机取样,也就是随机抽取key的数目,该值越大,就越接近真实lru算法,但是数值越大,相应的消耗也越大,对性能会产生影响,默认值是5.

淘汰策略:

淘汰策略也就是lru提供的6种淘汰机制,也就是maxmemory_policy的对应赋值。
noeviction:不淘汰数据,当内存使用超过maxmemory值时,返回报错并停止数据写入,默认Redis是此策略。
allkeys-lru:查询所有key中不常用的数据进行删除,
volatile-lru:在设置了超时时间的数据中,将不常用数据删除。
allkeys-random:查询所有key之后,随机删除
volatile-random:在设置超时时间数据中,随机删除
volatile-ttl:查询全部设置超时时间的数据,之后进行排序,把马上要过期的数据进行删除

4.0以后新增的2条策略:
volatile-lfu:从设置超时时间的键中驱逐使用频率最少的键
allkeys-lfu:从所有键中驱逐出最少的键

近似lru算法

lru算法需要一个双向链表来记录数据的最近被访问顺序,但是出于节省内存的考虑,Redis的LRU算法并非完整的实现。Redis并不会选择最久未被访问的键进行回收,近似lru算法是为了补足lur这点不足而另外产生的一种算法。
工作流程:对少量的键进行随机取样,然后回收其中最长时间未被访问的键,可以使用maxmemory-sample进行调整算法的精度,满足需求。
相关资料:
Redis3.0之后又改善了算法的性能,会提供一个待淘汰候选key的pool,里面默认有16个key,按照空闲时间排好序。更新时从Redis键空间随机选择N个key,分别计算它们的空闲时间idle,key只会在pool不满或者空闲时间大于pool里最小的时,才会进入pool,然后从pool中选择空闲时间最大的key淘汰掉。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值