Redis过期键的过期策略和内存淘汰机制

1 Redis 过期键的过期策略

Redis 过期策略是:定期删除 + 惰性删除

  • 定期删除:指的是 Redis 默认是每隔 100ms 就随机抽取⼀些(具体多少个可以设置)设置了过期时间的 key,检查其是否过期,如果过期就删除。

注意:肯定不是全部遍历,这样会导致 Redis 卡死。

但是问题是,定期删除可能会导致很多过期 key 到了时间并没有被删除掉,那怎么办呢?

  • 惰性删除:是指客户端在获取某个 key 的时候,Redis 会检查⼀下 这个 key 是否设置了过期时间并且判断是否已经过期。如果过期了,立即删除这个 key,不会给你返回任何东⻄。

注意:获取 key 的时候,如果此时 key 已经过期,就立即删除,不会返回任何东⻄。

2 内存淘汰机制

但是,如果有些 key 并没有被定期删除删除掉,也没有被查询触发惰性删除,那这些过期的 key 怎么删除呢?

Redis 提供了内存淘汰机制来删除这些 key。

Redis 内存淘汰机制有以下几种:

  • noeviction: 不会继续服务写请求 (DEL 请求可以继续服务),读请求可以继续进行。这样可以保证不会丢失数据,但是会让线上的业务不能持续进行。这是默认的淘汰策略
  • volatile-lru:尝试淘汰设置了过期时间的 key,最少使用的 key 优先被淘汰。没有设置过期时间的 key 不会被淘汰,这样可以保证需要持久化的数据不会突然丢失。
  • volatile-ttl:跟 volatile-lru 一样,除了淘汰的策略不是 LRU,而是 key 的剩余寿命 ttl 的值,ttl 越小越优先被淘汰。
  • volatile-random:跟上面一样,不过淘汰的 key 是过期 key 集合中随机的 key。
  • allkeys-lru:区别于 volatile-lru,这个策略要淘汰的 key 对象是全体的 key 集合,而不只是过期的 key 集合。这意味着没有设置过期时间的 key 也会被淘汰。(这个是最常用的)。
  • allkeys-random:跟上面一样,不过淘汰的策略是随机的 key。

redis.conf 配置如下:

# 设置 Redis 能够使用的最大内存,达到最大内存后会触发内存淘汰策略
maxmemory 300mb

# 设置内存淘汰策略
maxmemory-policy allkeys-lru
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值