redis过期策略在什么情况下触发

worktile 其他 12

回复

共3条回复 我来回复
  • 不及物动词的头像
    不及物动词
    这个人很懒,什么都没有留下~
    评论

    Redis过期策略是指在何种情况下,Redis会自动删除已经过期的键值对。Redis过期策略包括定时删除策略和惰性删除策略。

    1. 定时删除策略:
      定时删除是指Redis会在设定的时间间隔内,扫描部分或全部键空间来删除已过期的键值对。Redis使用一个定时器来将需要过期删除的键添加到一个一次性删除的队列中。具体步骤如下:
      a. 客户端在操作一个已经过期的键时,Redis会先删除该键然后进行操作,返回空值。
      b. 定时器每隔一段时间检查一部分键空间,将过期的键添加到一次性删除队列中。
      c. 当客户端再次操作这些已过期的键时,Redis会发现该键已经在一次性删除队列中,此时Redis会从键空间中彻底删除该键。

    2. 惰性删除策略:
      惰性删除是指Redis在客户端请求访问某个键时,先检查该键是否过期,如果过期就删除,然后返回空值给客户端。这种策略减少了定时删除的频率和资源消耗,但可能导致键在过期期间一直存在,并在被访问时才进行删除,造成一定的性能损耗。

    Redis过期策略的选择取决于应用场景和需求。如果对数据删除的时效性要求较高,可以选择定时删除策略;如果对数据的立即性要求较高,可以选择惰性删除策略。同时,可以通过Redis的配置参数来调整过期策略的参数,如定时删除的扫描频率、惰性删除的内存占用等。

    1年前 0条评论
  • fiy的头像
    fiy
    Worktile&PingCode市场小伙伴
    评论

    Redis使用了两种过期策略来管理键的过期时间:惰性删除(lazy expiration)和定期删除(periodic expiration)。

    1. 惰性删除(lazy expiration):当客户端尝试访问一个已经过期的键时,Redis会立即将其删除。这种过期策略会触发在以下情况下:

      • 当客户端进行GET、SET、HGET等操作时,Redis会检查键是否过期,如果过期则立即删除。
      • 当某个键被修改时,Redis会检查并删除已经过期的键,然后再进行修改操作。
    2. 定期删除(periodic expiration):为了防止过期键堆积,Redis使用了定期删除策略。通过在每个Redis实例中的事件循环中,随机检查一部分键,并删除其中过期的。这种过期策略会触发在以下情况下:

    • 每隔一段时间(默认为1秒),Redis会对一定数量的键进行检查,删除其中过期的键。
    • 定期删除策略不会保证立即删除所有过期键,但会逐渐清理过期键以释放内存。
    1. Redis的过期策略是基于惰性删除和定期删除相结合的。惰性删除保证了过期键在访问时会立即删除,而定期删除保证了过期键会定期被删除,防止内存堆积。

    2. Redis对于过期键的处理是在请求的数据被访问之前进行的,而不是在数据被访问时。这意味着过期键在被访问之前可能已经被删除,但实际的删除时间可能会有一定的延迟。

    3. Redis还提供了手动删除过期键的机制,可以通过EXPIRE、PEXPIRE、EXPIREAT等命令设置键的过期时间。同时,还可以通过TTL命令获取键的剩余过期时间。可以通过这些命令来管理和监控过期键的状态。

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

    Redis中的过期策略是指当键过期时,系统会触发一些操作来处理过期键的情况。Redis的过期策略一般有两种情况下会触发:

    1. 读操作时触发键过期检查:Redis在执行读操作(例如GET、HGET等)之前,会先检查键是否过期。如果键已经过期,Redis会先进行键的删除操作,然后再执行读操作,此时返回的结果是空值(null)。

    2. 写操作时触发定期删除和惰性删除:Redis会周期性地对一部分设置了过期时间的键进行处理。这个过期处理操作主要包括两个步骤:定期删除和惰性删除。

      • 定期删除:每隔一段时间,Redis会从设置了过期时间的键中随机选择一部分进行检查。Redis会检查这些键的过期时间,如果过期了就删除它们。为了避免在同一时间点执行大量键的删除操作而影响系统性能,Redis会将检查和删除操作分摊到多个时间点上进行。
      • 惰性删除:当一个过期键被访问时,Redis会检查键的过期时间。如果过期了,Redis会立即将键删除,然后返回空值。这个操作是在读、写操作时进行的,所以又被称为惰性删除。

    需要注意的是,过期键的删除操作是非阻塞的,即不会影响Redis的主线程。过期键的删除操作是由Redis的后台线程来完成的,Redis主线程不会被阻塞。

    综上所述,Redis的过期策略在读操作时触发键过期检查,并在写操作时触发定期删除和惰性删除。这样可以保证过期键能够及时被删除,并且不会对Redis的性能产生较大的影响。

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

400-800-1024

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

分享本页
返回顶部