redis的过期是什么

fiy 其他 8

回复

共3条回复 我来回复
  • worktile的头像
    worktile
    Worktile官方账号
    评论

    Redis中的过期是指设置键值对的生存时间,即在一定时间之后自动将键值对删除。Redis通过两种方式来实现键值对的过期:定期删除和惰性删除。

    1. 定期删除:Redis会每隔一段时间(默认是100ms)随机检查一些设置了过期时间的键值对,将其中过期的键值对删除。这种方式可以保证过期的键值对会被删除,但也会带来一定的性能开销。

    2. 惰性删除:当客户端尝试访问一个已经过期的键时,Redis会先检测该键是否过期,如果过期则立即删除,然后返回空值。这种方式减少了定期删除带来的性能开销,但可能会出现一些过期键在被访问前一直存在的情况。

    为了提高效率,Redis并不是对每个键都进行定期检查或者惰性删除,而是采用了一种复杂的算法,称为惰性删除加定期删除(lazy expiration + periodic expiration)的结合方式。

    需要注意的是,过期时间的精度不是非常准确,可能会有一定的误差。另外,在使用Redis时,可以通过设置配置文件中的maxmemory_policy参数来控制当内存不足时的策略,包括noeviction(不删除键,新写入操作会被拒绝)、allkeys-lru(删除最近最少使用的键)等。

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

    Redis是一个开源的内存数据库,它支持在存储的数据上设置过期时间。过期时间是指当数据在一定时间内没有被读取或修改时,Redis会自动删除这个数据。

    Redis的过期机制是通过使用键(key)的过期时间来实现的。在Redis中,每个键都可以设置一个过期时间(即过期时间戳),Redis会定期检查键的过期时间,并删除已过期的键。

    下面是关于Redis过期的几个方面的解释:

    1. 过期策略:Redis使用了惰性过期和定期过期两种策略来处理键的过期。惰性过期是指在访问键时才会检查它的过期时间,并在过期时删除它。定期过期是指Redis会每隔一段时间(默认是100ms)随机检查一批键的过期时间,并删除过期的键。

    2. 过期时间精度:Redis的过期时间精确到秒级别。当键的过期时间到达后,Redis会将其删除,不再对外提供访问。但是,由于Redis是单线程的,可能会有一小段时间窗口内的键仍然可以被访问。

    3. 过期键的删除:当键的过期时间到达后,Redis会将其标记为过期,并在需要访问该键时进行删除。删除过期键的操作是在主线程中执行的,所以如果删除大量的过期键,可能会阻塞Redis的主线程,影响其他操作的执行。

    4. 内存回收:当过期键被删除后,Redis并不会立即回收被占用的内存,而是等待下一次的内存回收操作。Redis使用了一种称为“惰性回收”的机制,即将删除的键的内存空间标记为可重用,而不是立即释放。

    5. 手动过期:除了在创建键时设置过期时间外,Redis还提供了手动设置键的过期时间的命令,如EXPIRE和PEXPIRE。这样可以在需要的时候动态地改变键的过期时间。

    总结起来,Redis通过键的过期时间来实现数据的自动删除。它使用了惰性过期和定期过期两种策略来删除过期键,并采用了一种惰性回收的机制来回收被删除键占用的内存空间。同时,Redis还提供了手动设置过期时间的命令,以便动态地管理键的过期。

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

    Redis的过期是指在设定的时间内,对存储在Redis中的数据进行自动删除的机制。在Redis中,可以为每个键(key)设置一个过期时间。当键到达指定的过期时间后,Redis会自动将该键删除,释放内存空间。

    Redis的过期机制有两个主要的实现方法:惰性删除和定期删除。

    1. 惰性删除:当你尝试获取一个已经过期的键时,Redis会执行惰性删除的操作,即检查该键是否过期,如果过期则删除该键。这种方法的优点是对内存空间的使用没有浪费,只有当需要访问该键时才会进行删除操作。但是缺点是在过期键上的get操作会比较费时,因为需要先进行检查操作。

    2. 定期删除:Redis默认每秒执行10次定期删除操作。该操作会检查一定数量的随机键是否过期,如果过期则删除。定期删除是通过一个算法进行操作的,该算法不会一次性检查所有过期键,而是在每次删除操作中利用一小部分CPU时间来处理。这种方法的优点是删除的操作是批量进行的,不需要对每个键都进行检查,相对于惰性删除来说效率较高。但是缺点是可能会造成一些过期键没有及时删除。

    Redis提供了多种设置过期时间的方法:

    1. 使用EXPIRE命令设置过期时间:EXPIRE key seconds,将键key的过期时间设置为seconds秒。
    2. 使用PEXPIRE命令设置过期时间:PEXPIRE key milliseconds,将键key的过期时间设置为milliseconds毫秒。
    3. 使用EXPIREAT命令设置过期时间:EXPIREAT key timestamp,将键key的过期时间设置为timestamp时间戳。
    4. 使用PERSIST命令移除过期时间:PERSIST key,移除键key的过期时间,使其永久存在。
    1年前 0条评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

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

分享本页
返回顶部