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

二、设置生存时间

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

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

EXPIRE示例:

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

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

PEXPIRE 示例:

redis> PEXPIRE number
(integer)
redis> EXISTS number
(integer)
redis> EXISTS number
(integer)

注 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
(integer)
redis> EXISTS msg # 之前
(integer)
redis> EXISTS msg # 之后
(integer)

PEXPIREAT 示例:

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

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

设置生存时间和设置过期时间都可以让 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
(integer)
redis> TTL msg
(integer)
redis> PTTL msg
(integer)
redis> SET number
OK
redis> EXPIREAT number
(integer)
redis> TTL number # 距离 ... 的秒数
(integer)
redis> PTTL number # 距离 ... 的毫秒数
(integer)

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

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

PERSIST key

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

PERSIST示例:

redis> SET msg "hello"
OK
redis> EXPIRE msg
(integer)
redis> TTL msg
(integer)
redis> PERSIST msg
(integer)
redis> TTL msg
(integer) -
redis> SET number
OK
redis> EXPIREAT number
(integer)
redis> TTL number
(integer)
redis> PERSIST number
(integer)
redis> TTL number
(integer) -

Redis附加功能之键过期功能的更多相关文章

  1. Redis源码解析:09redis数据库实现(键值对操作、键超时功能、键空间通知)

    本章对Redis服务器的数据库实现进行介绍,说明Redis数据库相关操作的实现,包括数据库中键值对的添加.删除.查看.更新等操作的实现:客户端切换数据库的实现:键超时相关功能的实现.键空间事件通知等. ...

  2. Redis(三)Redis附加功能

    一.慢查询分析 许多存储系统(例如MySql)提供慢查询日志帮助开发和运维人员定位系统存在的慢操作. 所谓慢查询日志就是系统在命令执行前后计算每条命令的执行时间,当超过预设阈值,就将这条命令的相关信息 ...

  3. 探索Redis设计与实现9:数据库redisDb与键过期删除策略

    本文转自互联网 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial ...

  4. Spring Boot 整合 Redis 和 JavaMailSender 实现邮箱注册功能

    Spring Boot 整合 Redis 和 JavaMailSender 实现邮箱注册功能 开篇 现在的网站基本都有邮件注册功能,毕竟可以通过邮件定期的给用户发送一些 垃圾邮件 精选推荐

  5. 一文详解Redis键过期策略

    摘要:Redis采用的过期策略:惰性删除+定期删除. 本文分享自华为云社区<Redis键过期策略详解>,作者:JavaEdge. 1 设置带过期时间的 key # 时间复杂度:O(1),最 ...

  6. redis使用watch完成秒杀抢购功能

    Redis使用watch完成秒杀抢购功能: 使用redis中两个key完成秒杀抢购功能,mywatchkey用于存储抢购数量和mywatchlist用户存储抢购列表. 它的优点如下: 1. 首先选用内 ...

  7. 详解MySQL的用户密码过期功能

    这篇文章主要为大家详细介绍了MySQL的用户密码过期功能的相关资料,需要的朋友可以参考下   Payment Card Industry,即支付卡行业,PCI行业表示借记卡.信用卡.预付卡.电子钱包. ...

  8. redis使用watch完成秒杀抢购功能(转)

    redis使用watch完成秒杀抢购功能: 使用redis中两个key完成秒杀抢购功能,mywatchkey用于存储抢购数量和mywatchlist用户存储抢购列表. 它的优点如下: 1. 首先选用内 ...

  9. 08Mybatis_入门程序——增加用户的操作以及返回自增主键的功能以及返回非自增主键的功能

    本文要实现的功能是:给user表增加一个用户. 建表如下:

随机推荐

  1. Spring 注解总结

    声明:这是转载的.内容根据网上资料整理.相关链接:http://www.360doc.com/content/10/1118/16/2371584_70449913.shtmlhttp://www.i ...

  2. Android.mk文件语法规范 原文

    序言:------------- 此文档旨在描述Android.mk文件的语法,Android.mk文件为Android NDK(原生开发)描述了你C/C++源文件.为了明白下面的内容,你必须已经阅读 ...

  3. ajax简单案例:返回json型

    主页: <!--输入代号点击查询查到本代号的人名--> <body> <div> 请输入代号:<input type="text" id= ...

  4. 如何利用gatling创建一个性能测试例

    [原创博文,转载请声明出处] 基于上一篇博文介绍如何源码编译创建自己的gatling可执行工具,今天介绍一下如何基于gatling做性能测试! 由于gatling的测试例脚本是基于scala写的,所以 ...

  5. ShopEX 4.8.5.81822 前台Getshell

    ShopEX 4.8.5.81822 前台Getshell 作者:unhonker   发布:2014-06-23 00:12   分类:漏洞公布   被撸:8,179次   抢沙发     利用方式 ...

  6. 【并发编程】AQS学习

    一个简单的示例: package net.jcip.examples; import java.util.concurrent.locks.*; import net.jcip.annotations ...

  7. SVN学习之参数定义及设置

    http://jackyrong.iteye.com/blog/238835 conf目录中打开svnserve.conf ,去掉注释,搞成如下这样 [general] anon-access = r ...

  8. 好的博客mark

    1. http://blog.csdn.net/zqixiao_09/article/month/2016/03 涉及面光,包括上层/底层, uboot/kernel/rootfs/driver.

  9. 黄聪:wordpress如何开启文章格式post format

    发现很多“古老”的WordPress主题使用量非常大,虽然部分也在随着WordPress版本的升级而“升级”,只不过是修复了bug而已,wordpress的新特性并没有使用.而且多数国内的wordpr ...

  10. C# 如何将字符串形式的” \\u1234 “ 为 “ \u1234” 的unicode编码解码为中文

    using System.Text.RegularExpressions; decodedStr = Regex.Unescape(escapeUnicodeStr);