Redis面试题之过期key的删除策略

1. Redis的key有效期设置及淘汰策略

Redis的数据结构是key-value格式的键值对, 在项目中通常作为缓存数据库使用, 当然使用过程中经常对key设置有效期.

1.1 key的过期时间和永久有效分别怎么设置

expire命令和persist命令.

1.2 Redis的过期键的删除策略

Redis是key-value数据库, 我们可以设置Redis中缓存的key的过期时间. Redis的过期策略就是指当Redis中缓存的key过期了, Redis如何处理.

过期策略通常有以下三种:

  • 定时过期:

    1. 每个设置过期时间的key都需要创建一个定时器, 到过期时间就会立即清除.
    2. 优点: 节约内存, 到时就删除, 快速释放掉不必要的内存占用.
    3. 缺点: CPU压力很大, 无论CPU此时负载量多高, 均占用CPU, 会影响Redis服务器响应时间和指令吞吐量.
    4. 总结: 用处理器性能换取存储空间(拿时间换空间).
  • 惰性过期

    1. 数据到达过期时间, 不做处理. 等下次访问该数据时
      如果未过期, 返回数据.
      如果已过期, 删除, 返回不存在.
    2. 优点: 节约CPU性能, 发现必须删除的时候才删除.
    3. 缺点: 内存压力很大, 出现长期占用内存的数据.
    4. 总结: 用存储空间换取处理器性能(拿时间换空间)
  • 定期过期:

    1. 周期性轮询Redis库中的时效性数据, 采用随机抽取的策略, 利用过期数据占比的方式控制删除频度.
      expires[]记录了所有过期key的地址还有时间, 会定期轮询这个字典数据.
    2. 特点1: CPU性能占用设置有峰值, 检测频度可自定义设置.
    3. 特点2: 内存压力不是很大, 长期占用内存的冷数据会被持续清理
    4. 周期性抽查存储空间(随机抽查, 重点抽查)

Redis中同时使用了惰性过期定期过期两种过期策略。

2. 逐出算法(淘汰策略)

当新数据进入Redis时, 如果内存不足怎么办? 也就是这时候Redis中所有的key都没有过期, 但是又来了新的数据需要存储, 就需要临时淘汰一些数据, 这就是逐出算法或者淘汰策略.

  • Redis使用内存存储数据, 在执行每一个命令前, 会调用freeMemoryIfNeeded()检测内存是否充足. 如果内存不满足新加入数据的最低存储要求, Redis要临时删除一些数据为当前指令清理存储空间, 清理数据的策略称为逐出算法.

  • 注意:逐出数据的过程不是100%能够清理出足够的可使用的内存空间, 如果不成功则反复执行. 当对所有数据尝试完毕后, 如果不能达到内存清理的要求, 将出现错误信息.
    在这里插入图片描述

  • 数据逐出的相关配置
    在这里插入图片描述

  • 一共8种逐出策略
    在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值