redis 的过期策略是如何实现的

worktile 其他 8

回复

共3条回复 我来回复
  • fiy的头像
    fiy
    Worktile&PingCode市场小伙伴
    评论

    Redis的过期策略是通过定期删除和惰性删除相结合的方式来实现的。

    1. 定期删除:Redis默认每隔一段时间(默认为100毫秒)会随机抽取一部分设置了过期时间的key,检查其是否过期,如果过期就删除。这种方式能够保证过期的key及时被删除,但是对于设置过期时间较长的key,会带来额外的CPU负载。

    2. 惰性删除:在用户获取某个key的时候,Redis会检查该key是否过期,如果过期则会立即删除。这种方式能够避免定期删除带来的额外CPU负载,但是可能会导致过期key在一段时间内依然存在。

    两种删除方式相结合,既能够及时删除过期的key,又能够减少额外的CPU负载。

    需要注意的是,Redis并不保证过期key一定会被立即删除,因为定期删除和惰性删除都是在Redis的工作线程中进行的,如果Redis的工作线程比较繁忙,删除过期key的工作可能会被延迟。另外,Redis的过期策略是近似过期,即过期key并不是在过期的那一刻被删除,而是在下次访问时被发现并删除。

    总结起来,Redis的过期策略是通过定期删除和惰性删除相结合的方式来实现的,保证了过期key的及时删除,并且能够减少额外的CPU负载。

    1年前 0条评论
  • worktile的头像
    worktile
    Worktile官方账号
    评论

    Redis中的过期策略是通过使用两种不同的机制来实现的:定期删除和惰性删除。

    1. 定期删除:Redis默认每隔一段时间(默认是100毫秒)会随机选择一些设置了过期时间的键进行检查和删除操作。具体过程如下:

      • Redis将所有设置了过期时间的键存储在一个有序集合中,以键的过期时间为分值,键名为成员。
      • 定期任务会在一定时间间隔内,从排序集合中获取一部分键,检查其过期时间,如果过期则删除。这个过程是通过Redis的事件循环机制实现的。虽然每次只删除一部分键,但由于Redis的事件循环非常高效,所以可以处理大量的键。
      • 定期删除策略可以在Redis的配置文件中进行调整,可以修改执行频率,以适应应用的需求。
    2. 惰性删除:当客户端执行操作时,Redis会检查键的过期时间,并在必要时进行删除。具体过程如下:

      • 当客户端访问某个键时,Redis会检查键的过期时间。
      • 如果键已经过期,则Redis会立即删除键并返回空值。
      • 如果键未过期,则继续处理该键。

    Redis的过期策略具有以下特点:

    1. 精确删除:Redis的过期策略是精确的,即键在过期之后立即被删除。这保证了所有过期键都会被及时清理,节省了内存空间。

    2. 轻量级:由于Redis使用了定期删除和惰性删除两种机制,所以对CPU和内存的消耗是非常低的。定期删除只会删除一部分键,而惰性删除仅在需要时执行。

    3. 实时性:Redis的过期策略是实时的,意味着所有的过期键会在下一次被访问时立即被删除。这保证了应用程序可以及时释放过期的资源。

    4. 非阻塞:过期键的删除操作不会阻塞Redis的其他操作,因为它们是通过Redis的事件循环机制来处理的。所以即使在删除大量过期键的时候,Redis也能保持响应性能。

    5. 可配置性:Redis的过期策略可以根据应用程序的需求进行调整。可以通过修改配置文件来改变定期删除的执行频率,以及同时设置过期时间的键的数量等参数。

    总结:Redis的过期策略通过定期删除和惰性删除两种机制来保证过期键的删除,具有精确、轻量级、实时、非阻塞和可配置等特点。这些特点使得Redis能够高效地管理键的过期和删除,提供高性能的数据存储和访问能力。

    1年前 0条评论
  • 不及物动词的头像
    不及物动词
    这个人很懒,什么都没有留下~
    评论

    Redis是一款开源的高性能键值存储系统,它的过期策略是通过设置键的过期时间来实现的。Redis的过期策略可以分为两种:惰性删除和定期删除。

    1. 惰性删除:
      惰性删除是指当客户端访问一个已经过期的键时,Redis会在访问时检查键的过期时间,并在键已过期时删除它。这意味着过期键不会立即被删除,而是在访问时被检测到并删除。

    具体的实现流程如下:

    • 客户端发送一个读命令给Redis服务端,请求访问某个键。
    • 在执行读操作前,Redis会先检查这个键是否已经过期,如果键过期了,就将它删除。
    • 如果键未过期,则执行读取操作并返回结果给客户端。

    这种惰性删除策略的优点是节约了删除过期键的时间和资源,只有在需要访问键时才会删除,避免了频繁的删除操作对系统性能的影响。

    1. 定期删除:
      除了惰性删除之外,Redis还通过定期删除策略来扫描并删除过期键,以防止过期键积累和内存泄漏。

    具体的实现流程如下:

    • Redis使用一个定时器,每隔一段时间(默认是1秒),就随机抽取一些过期键进行检查和删除。
    • Redis将所有的过期键都放在一个字典结构中,通过一个全局的过期键字典来保存所有的过期键信息。
    • 定期删除策略会遍历过期键字典,逐个检查键的过期时间,并删除过期的键。
    • 当删除过期键的数量超过一定阈值(默认是每次删除20个),那么会中止当前删除操作,并开启一个异步线程来继续删除操作,以避免阻塞主线程。

    定期删除策略的优点是避免了过期键的积累和内存泄漏,保证了系统的稳定性和可靠性。

    综上所述,Redis的过期策略是通过惰性删除和定期删除相结合的方式来实现的,从而保证了过期键的及时删除和系统的高性能。

    1年前 0条评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部