Redis的内存淘汰策略

三种类型

可以将淘汰策略分为三种,一种是对于设置了过期时间的key,一种对于所有key,另一种是内存上限后只允许读不允许写。 

设置了过期时间的key

  1. volatile-lru:淘汰最久未使用的key(最近一段时间访问次数最少)
  2. volatile-lfu:淘汰最少被使用的key
  3. volatile-ttl:淘汰剩余时间最短的key
  4. volatile-random:随机淘汰一个key

所有key

  1. allkeys-lru:淘汰最久未使用的key(最近一段时间访问次数最少)
  2. allkeys-lfu:淘汰最少被使用的key
  3. allkeys-random:随机淘汰一个key

默认使用

  • no-eviction:内存达到上限后只允许读,不能进行写操作

可以通过设置配置文件(redis.conf)修改使用的策略,maxmemory-policy

两种淘汰算法

1.LRU(Least Recently Used)最近最少使用

根据数据最近被访问的时间来移除那些使用次数最少的,最近一段时间使用次数最少的。

2.LFU(Least Frequently Used)最少使用

根据数据被访问的频率来决定哪些数据应该被移除,不关注使用时间,只关注使用频率。

不同的版本

在redis4.0版本之后出现了两种新的算法,是LFU对应的两种淘汰策略。

使用场景

1.读/写比例:

        应用主要是读操作,那么考虑使用 allkeys-lru 或 allkeys-lfu 策略,这些策略会保留频繁访问的数据。如果写操作较多,不希望写操作因内存不足而失败,noeviction 策略更适合。

2.数据的更新频率:

        数据经常更新,使用 volatile-lru 或 volatile-lfu 策略更合适,这些策略会考虑数据的过期时间和访问频率。

3.数据的访问模式:

3.1热点数据:

        应用中存在一些热点数据(即经常被访问的数据),allkeys-lru 或 allkeys-lfu 策略更适合,它们会保留这些热点数据。

3.2均匀访问模式:

        如果数据的访问模式比较均匀,即没有明显的热点数据,那么 volatile-random 或 allkeys-random策略可能更合适。

4.内存限制和性能要求:

内存限制严格:系统内存资源有限,且对性能要求较高,那么 noeviction 策略更适合,可以避免因内存不足而导致的写操作失败。


性能优化:在某些情况下,volatile-ttl策略可以帮助优化性能,会优先淘汰剩余生存时间较短的key,从而确保内存中保留更多的有效数据。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值