zoukankan      html  css  js  c++  java
  • Redis附加功能之键过期功能

    一、键过期功能的相关命令

    二、设置生存时间

    Redis 提供了两个命令来设置键的生存时间(TTL,time to live),它们分别是:

    如果给定的键不存在,那么 EXPIRE 和 PEXPIRE 将返回 0 ,表示设置失败;如果命令返回 1 ,那么表示设置成功。
    当一个键被设置了生存时间之后,它的生存时间将会随着时间的流逝而减少:时间过去一毫秒,键的生存时间就减少一毫秒;时间过去一秒钟,键的生存时间就减少一秒钟;以此类推。
    当一个键的生存时间被减少至低于 0 时,Redis 就会自动将这个键删除掉

    EXPIRE示例:

    redis> SET msg "hello world"
    OK
    redis> EXPIRE msg 5 # 设置生存时间
    (integer) 1
    redis> EXISTS msg # 仍然存在
    (integer) 1
    redis> EXISTS msg # 已被自动删除
    (integer) 0

    严格来说,设置生存时间为 5 ,会让键存在 6 秒钟。

    PEXPIRE 示例:

    redis> PEXPIRE number 5500
    (integer) 1
    redis> EXISTS number
    (integer) 1
    redis> EXISTS number
    (integer) 0

    注 1 :一秒钟 = 1000 毫秒
    注 2 :Redis 默认每 100 毫秒检查一次键是否过期,所以上表也是以每 100 毫秒为单位列出的。

    三、设置过期时间

    Redis 提供了两个命令用于设置键的过期时间(expire time):

    如果给定的键不存在,那么 EXPIREAT 和 PEXPIREAT 将返回 0 ,表示设置失败;如果命令返回 1 ,那么表示设置成功。
    对于被设置了过期时间的键来说,当键的过期时间小于当前时间的时候,Redis 就会自动地删除该键

    EXPIREAT 示例:

    redis> SET msg "time to go"
    OK
    redis> EXPIREAT msg 1000000005
    (integer) 1
    redis> EXISTS msg # 1000000005 之前
    (integer) 1
    redis> EXISTS msg # 1000000005 之后
    (integer) 0

    PEXPIREAT 示例:

    redis> SET song "Last Night, Good Night"
    OK
    redis> PEXPIREAT song 1000000005500
    (integer) 1
    redis> EXISTS song # 1000000005500 之前
    (integer) 1
    redis> EXISTS song # 1000000005500 之后
    (integer) 0

    四、生存时间和过期时间的区别

    设置生存时间和设置过期时间都可以让 Redis 自动删除指定的键,它们的区别在于设置“键什么时候要被删除”的方式不同

    EXPIRE 和 PEXIRE 的作用是让键在 N 秒钟或者 N 毫秒之后被删除。
    EXPIREAT 和 PEXPIREAT 的作用则是让键在指定的 UNIX 时间到达之后被删除。

    带有生存时间的键就像是一个倒计时器,它会倒数 5、4、3、2、1、0,然后被删掉。
    而带有过期时间的键则像是一个定时器,它会在指定的时间来临之后被删掉。

    五、返回键的剩余生存时间

    在为一个键设置过期时间或者生存时间之后,用户可以使用 TTL 命令或者 PTTL 命令查看这个键的剩余生存时间,以此来获知键还有多久才会被 Redis 删除:

    TTL 和 PTTL 可能会返回三种不同的值:

    TTL 和 PTTL 示例:

    redis> SET msg "hello"
    OK
    redis> EXPIRE msg 10086
    (integer) 1
    redis> TTL msg
    (integer) 10083
    redis> PTTL msg
    (integer) 10079336
    redis> SET number 10086
    OK
    redis> EXPIREAT number 1408498480
    (integer) 1
    redis> TTL number # 距离 14...80 的秒数
    (integer) 15
    redis> PTTL number # 距离 14...80 的毫秒数
    (integer) 11651

    注意:Redis 并没有提供查看键的过期时间的命令,所以对于一个设置了过期时间的键来说,我们只能使用TTL 和 PTTL 来查看它的剩余生存时间

    六、移除键的过期时间或生存时间

    PERSIST key

    移除为键 key 设置的过期时间或生存时间,使得它不会被 Redis 自动删除。
    移除成功时命令返回 1 ;如果命令没有设置过期时间或生存时间,那么命令返回 0 。

    PERSIST示例:

    redis> SET msg "hello"
    OK
    redis> EXPIRE msg 30
    (integer) 1
    redis> TTL msg
    (integer) 28
    redis> PERSIST msg
    (integer) 1
    redis> TTL msg
    (integer) -1
    redis> SET number 10086
    OK
    redis> EXPIREAT number 1408499100
    (integer) 1
    redis> TTL number
    (integer) 25
    redis> PERSIST number
    (integer) 1
    redis> TTL number
    (integer) -1
  • 相关阅读:
    Linux DNS配置
    SqlCommandBuilder 为SqlDataAdapter 提供 update、insert、delete 命令(自己利用select命令自动从数据库元数据推断)
    Dev中GridView——事件
    select 动态赋值 layui重新渲染
    url-loader和file-loader的区别和使用
    Fetch API
    Fetch API
    FormData上传文件
    Buffer、ArrayBuffer互转
    if exists用法(判断对象的用法)
  • 原文地址:https://www.cnblogs.com/luogankun/p/3986600.html
Copyright © 2011-2022 走看看