Redis的过期删除机制与内存淘汰策略

过期机制

Redis提供了两种过期机制相互配合:定期删除与惰性删除
定期删除
redis.conf文件中有个hz的配置,默认配置的是hz=10,这个10表示每隔一段时间redis会再一秒内扫描10次设置了过期时间的key,但是一次仅扫描出20个key,判断这20个key是不是已经过期,如果已经过期了的数量超过1/4那么会重新扫描20个key直到过期的key不超过1/4。
惰性删除
当客户端在操作这个key的时候,如果key过期了就删除,返回null。

淘汰策略

在64位操作系统中,没有设置Redis默认的maxMemory的大小,一般建议设置为物理内存大小的3/4。当内存达到maxMemory时,执行淘汰策略。
noeviction:不淘汰,直接报错
volatile-ttl:淘汰设置了过期时间的key中剩余存活时间最短的
volatile-lru;淘汰设置了过期时间的key中最近最少使用的
volatile-lfu:从设置了过期时间的key中淘汰最不经常使用的
volatile-random:随机从设置了过期时间的key中淘汰
allkeys-lru:从所有的key中淘汰最近最少使用的
allkeys-lfu从所有的key中淘汰最不经常使用的
allkeys-random:从所有key中随机删除某个key。
redis.conf配置文件中通过 maxmemory-samples 选项配置的的值可以调整触发淘汰机制时每次取得淘汰数量的多少。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Redis是一款高性能的Key-Value存储系统,它提供了多种数据结构和丰富的功能,能够满足各种存储需求。在Redis中,内存淘汰是一种非常重要的机制,通过控制内存使用来保证系统的稳定性和性能。 内存淘汰Redis中的一个重要机制,它可以将一部分数据从内存删除,以释放更多的内存空间。在Redis中,内存淘汰一般有几种策略,包括LRU(Least Recently Used)、LFU(Least Frequently Used)、Random等等,而Redis默认的内存淘汰策略是LRU。 但是,在一些场景中,Redis中的数据并不是按照时间顺序进行访问的,而是需要在指定的时间点过期。为了解决这个问题,Redis还提供了一种特殊的内存淘汰策略——volatile-lru和volatile-ttl。这两种内存淘汰策略的特点是:它们只会淘汰过期数据或者TTL(Time To Live)值到期的数据,而不会淘汰过期的数据。 在使用这两种策略时,需要加上volatile选项,例如指定maxmemory-policy为volatile-lru或volatile-ttl。此时,Redis会将未过期的数据和已经过期但未被删除的数据分别保存在两个不同的哈希表中,内存淘汰只会针对已过期但仍在内存中的数据进行操作。 因此,Redis可以通过特殊的内存淘汰策略来解决不会过期的数据的问题。通过使用可volatile-lru和volatile-ttl两种策略Redis只会淘汰过期的数据,而不会淘汰过期的数据,从而保证系统的正确性和稳定性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值