Redis如何清理过期的key以及对应的解决方法分析

 更新时间:2025年03月11日 11:27:15   作者:安的列斯凯奇  
这篇文章主要介绍了Redis如何清理过期的key以及对应的解决方法的相关资料,Redis提供了多种过期删除策略和内存淘汰策略,以管理缓存和临时数据,需要的朋友可以参考下

在 Redis 中,可以通过特定的命令为 Key 设置过期时间,使得 Key 在一定时间后自动删除,这对于管理缓存、验证码等临时数据非常有用。

解决方法

1. Redis过期删除策略

1.1 如何实现过期策略

对一个 key 设置了过期时间时,Redis 会把该 key 带上过期时间存储到一个过期字典中,字典保存了数据库中所有 key 的过期时间

1.2 如何实现删除策略

1.2.1 常见的三种过期删除策略

  • 定时删除:指在指定的时间点自动删除某些内容或文件。

  • 惰性删除:可能指的是一种被动或延迟的删除方式,即在某些条件下或触发某些事件后才进行删除。

  • 定期删除:指按照一定的时间间隔(如每天、每周等)自动删除某些内容或文件。

1.2.2 Redis 使用的过期删除策略

惰性删除:

  • 客户端

    • 这是流程的起点,表示用户或应用程序发起了一个请求。

  • 请求 key

    • 客户端请求一个特定的数据项,这个数据项通过一个唯一的标识符(key)来标识。

  • 是否过期

    • 这是一个决策点,系统需要检查请求的 key 是否已经过期。这通常涉及到检查 key 的有效期限或最后访问时间。

  • 是(删除 key)

    • 如果 key 已经过期,流程进入这一分支。系统将执行删除操作,移除这个过期的 key 及其关联的数据。

  • 返回 null

    • 删除操作完成后,系统向客户端返回一个 null 值,表示请求的数据项已被删除,不再可用。

  • 结束

    • 流程结束,客户端接收到 null 值后,可以进行相应的处理,如提示用户数据已过期或删除。

  • 否(返回数据)

    • 如果 key 没有过期,流程进入这一分支。系统将检索并返回与该 key 关联的数据。

  • 结束

    • 流程结束,客户端接收到请求的数据,可以进行进一步的处理或显示。

也就是说删除操作是在数据被请求时才进行的,而不是预先计划的。这种策略可以减少不必要的删除操作,只有在数据确实不再需要时才进行删除

定时删除:

  • 开始

    • 这是流程的起点,表示定期删除过程的开始。

  • 过期字典随机抽取

    • 在这一步,系统从存储过期数据的字典中随机抽取一部分数据进行处理。

  • 删除过期 key

    • 系统检查抽取的数据中哪些 key 已经过期,并执行删除操作。

  • 执行时间上限

    • 这是一个决策点,系统检查删除操作的执行时间是否超过了预设的时间上限。

    • 如果执行时间超过了上限,流程将跳转到“结束”步骤,以避免过长的删除操作影响系统性能。

  • 过期 key 超过 25%

    • 另一个决策点,系统检查被抽取的数据中过期的 key 是否超过了 25%。

    • 如果过期的 key 超过了 25%,说明有大量的数据需要删除,流程将返回到“过期字典随机抽取”步骤,继续处理更多的数据。

    • 如果过期的 key 没有超过 25%,流程将进入“结束”步骤。

  • 结束

    • 这是流程的终点,表示定期删除过程的结束。

也就是说删除操作是按照一定的周期进行的,而不是在数据被请求时才进行。这种策略有助于系统定期清理过期数据,保持系统的整洁和性能。

2. Redis内存淘汰策略

  • noeviction(不淘汰数据)

    • 当内存不足以容纳新写入数据时,Redis将拒绝执行写入操作(如SET、LPUSH等)。

    • 这种策略不会主动删除任何数据,适用于对数据完整性要求非常高的场景。

  • 进行数据淘汰

    • 当内存不足以容纳新写入数据时,Redis将根据配置的淘汰策略来删除一些数据以释放内存。

    • 这种策略适用于需要动态调整内存使用的场景。

  • 存在过期时间数据

    • 这类数据是指设置了过期时间的键(key),Redis可以对这类数据应用以下几种淘汰策略:

      • volatile-random:从设置了过期时间的键中随机选择一些进行删除。

      • volatile-ttl:从设置了过期时间的键中选择即将过期的键进行删除。

      • volatile-lru(Least Recently Used):从设置了过期时间的键中选择最近最少使用的键进行删除。

      • volatile-lfu(Least Frequently Used):从设置了过期时间的键中选择使用频率最低的键进行删除。

  • 所有数据

    • 这类数据是指所有存储在Redis中的键,包括设置了过期时间和未设置过期时间的键。Redis可以对这类数据应用以下几种淘汰策略:

      • allkeys-random:从所有键中随机选择一些进行删除。

      • allkeys-lru:从所有键中选择最近最少使用的键进行删除。

      • allkeys-lfu:从所有键中选择使用频率最低的键进行删除。

通过这些策略,Redis可以在内存达到最大限制时,根据实际需求和数据的重要性灵活地选择哪些数据应该被删除,以确保系统的稳定性和性能。

总结

到此这篇关于Redis如何清理过期的key以及对应的解决方法的文章就介绍到这了,更多相关Redis清理过期key内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python中使用redis用法详解

    python中使用redis用法详解

    Redis拥有丰富的数据结构,拥有事务功能,保证命令的原子性。由于是内存数据库,读写非常高速,可达10w/s的评率,所以一般应用于数据变化快、实时通讯、缓存等。这篇文章给大家讲解一下Python如何使用Redis,并进行相关的实战操作。
    2022-12-12
  • 详解如何使用Redis实现分布式锁

    详解如何使用Redis实现分布式锁

    Redis 作为一个独立的三方系统,其天生的优势就是可以作为一个分布式系统来使用,因此使用 Redis 实现的锁都是分布式锁,所以本文就给大家讲讲如何使用Redis实现分布式锁,感兴趣的小伙伴跟着小编来看看吧
    2023-08-08
  • 详解redis-cli 命令

    详解redis-cli 命令

    这篇文章主要介绍了redis-cli 命令详解,主要包括命令使用及使用info命令获取服务器的信息,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-10-10
  • Redis的LRU机制介绍

    Redis的LRU机制介绍

    这篇文章主要介绍了Redis的LRU机制介绍,Redis会按LRU算法删除设置了过期时间但还没有过期的key,而对于没有设置过期时间的key,Redis是永远保留的,需要的朋友可以参考下
    2015-06-06
  • 使用redis分布式锁解决并发线程资源共享问题

    使用redis分布式锁解决并发线程资源共享问题

    这篇文章主要介绍了使用redis分布式锁解决并发线程资源共享问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • CentOS系统安装Redis及Redis的PHP扩展详解

    CentOS系统安装Redis及Redis的PHP扩展详解

    这篇文章主要介绍了CentOS系统下安装Redis数据的教程,以及详解了Redis数据库的PHP扩展,文中介绍的很详细,相信对大家的理解和学习具有一定的参考借鉴价值,有需要的朋友们可以参考借鉴,下面来一起看看吧。
    2016-12-12
  • Redis内部数据结构Dict的实现方法

    Redis内部数据结构Dict的实现方法

    这篇文章主要介绍了Redis内部数据结构Dict的实现方法,本篇文章所述的dict在Redis中最主要的作用就是用于维护Redis数据库中所有Key、value映射的数据结构,需要的朋友可以参考下
    2022-05-05
  • Redis高可用的三种实现方式

    Redis高可用的三种实现方式

    在实际生产环境中为保证Redis的服务连续性和可靠性,需要设计一个高可用架构,本文就来介绍一下Redis高可用的三种实现方式,主要包括主从复制模式,Redis Sentinel模式和Redis Cluster模式,感兴趣的可以了解一下
    2023-12-12
  • Redis高并发分布锁的示例

    Redis高并发分布锁的示例

    在分布式系统中,实现分布式锁是一项常见的需求,本文主要介绍了Redis高并发分布锁的示例 ,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • redis replication环形缓冲区算法详解

    redis replication环形缓冲区算法详解

    这篇文章主要介绍了redis replication环形缓冲区算法的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-04-04

最新评论