Redis系列(六):设置/移除键的过期时间
本篇博客是Redis系列的第6篇,主要讲解以下内容:
- 数据库数量
- 切换目标数据库
- 设置键的过期时间
- 移除键的过期时间
本系列的前5篇可以点击以下链接查看:
Redis系列(三):Redis的持久化机制(RDB、AOF)
1. 数据库数量
默认情况下,Redis服务器有16个数据库,分别为db0~db15,如下图所示:

该数量是由配置文件中的databases选项决定的,默认值为16:

2. 切换目标数据库
默认情况下,我们执行的命令的目标数据库是db0,比如我们执行如下命令:
set message "Hello,Redis"
这个键值对会保存在数据库db0里,如下图所示:

如果想要切换目标数据库,可以使用SELECT命令,比如切换到db1,可以执行如下命令:
SELECT 1
然后执行如下图所示的命令:

此时该键值对会保存在db1里,如下图所示:

在实际使用时,建议遵循以下规范:
- 各个应用使用不同的目标数据库
- 1个应用尽量不要操作多个目标数据库
3. 设置/移除键的过期时间
Redis提供了7个和key的过期时间相关的命令,分别如下所示:
- TTL
- PTTL
- EXPIRE
- PEXPIRE
- EXPIREAT
- PEXPIREAT
- PERSIST
接下来详细讲解每个命令的使用方法。
3.1 TTL
TTL是Time To Live的缩写,用来查看某个key的剩余生存时间,单位为秒。
如果key没有设置过期时间,返回-1。
如果key不存在,返回-2。


3.2 PTTL
PTTL和TTL类似,也是用来查看某个key的剩余生存时间,但单位为毫秒。
如果key没有设置过期时间,返回-1。
如果key不存在,返回-2。

3.3 EXPIRE
EXPIRE命令用来给指定的key设置过期时间,单位为秒。
如果过期时间设置成功,返回1。
如果key不存在,返回0。

3.4 PEXPIRE
PEXPIRE与EXPIRE类似,也是用来给指定的key设置过期时间,但单位为毫秒。
如果过期时间设置成功,返回1。
如果key不存在,返回0。

3.5 EXPIREAT
EXPIREAT命令用来给指定的key设置过期时间,但指定的是某个时间点秒数的UNIX时间戳。
如果过期时间设置成功,返回1。
如果key不存在,返回0。
可以使用如下Java代码获取秒数的时间戳:
System.out.println(LocalDateTime.now().plusMinutes(2).toEpochSecond(ZoneOffset.ofHours(8)));

3.6 PEXPIREAT
PEXPIREAT与EXPIREAT类似,用来给指定的key设置过期时间,但指定的是点毫秒数的UNIX时间戳。
如果过期时间设置成功,返回1。
如果key不存在,返回0。
可以使用如下Java代码获取毫秒数的时间戳:
System.out.println(System.currentTimeMillis());
System.out.println(LocalDateTime.now().plusMinutes(2).toInstant(ZoneOffset.ofHours(8)).toEpochMilli());

3.7 PERSIST
PERSIST命令用来移除指定key的过期时间。
如果过期时间移除成功,返回1。
如果key不存在或者key没有设置过期时间,返回0。

4. 源码及参考
黄健宏 《Redis设计与实现》
Redis系列(六):设置/移除键的过期时间的更多相关文章
- Redis 过期键的设置、获取和删除过期时间
Redis 过期键的设置.获取和删除过期时间 转自http://blog.51cto.com/littledevil/1813956 设置过期 默认情况下键是没有生存时间的,也就是永不过期,除非清空内 ...
- Redis设置和更新Key的过期时间
EXPIRE key seconds 为给定 key 设置生存时间,当 key 过期时(生存时间为 0 ),它会被自动删除. 在 Redis 中,带有生存时间的 key 被称为『易失的』(volati ...
- springBoot2.0+redis+fastJson+自定义注解实现方法上添加过期时间
springBoot2.0集成redis实例 一.首先引入项目依赖的maven jar包,主要包括 spring-boot-starter-data-redis包,这个再springBoot2.0之前 ...
- 满足java对redis的所有操作,token,验证码过期时间等
很实用 链接在此 https://www.cnblogs.com/edisonfeng/p/3571870.html System.out.println("=============== ...
- redis入门指南(三)—— 事务、过期时间、SORT命令、消息通知与管道
写在前面 学习<redis入门指南>笔记,结合实践,只记录重要,明确,属于新知的相关内容. 事务 1.redis中的事务由一组命令的集合组成,要么都执行,要么都不执行,同时redis的事务 ...
- 设置一个严格的SESSION过期时间
认识一:当我们需要更改session生存时间的时候通行的做法是更改php.ini文件中 1: ; Name of the session (used as cookie name). 2: sessi ...
- Redis系列六:redis相关功能
一. 慢查询原因分析 与mysql一样:当执行时间超过阀值,会将发生时间耗时的命令记录 redis命令生命周期:发送 排队 执行 返回慢查询只统计第3个执行步骤的时间 预设阀值:两种方式,默认为10毫 ...
- Redis系列六 - 浅谈如何设计秒杀系统
前言 设计一个系统之前,我们肯定要先确认系统业务场景是怎样的,下面就以某电商平台上的秒杀活动为场景,一起来探讨一个秒杀系统改如何去设计. 场景 我们现在要卖100件纸尿布,按照系统的用户量及以往经验来 ...
- Redis系列(六)-SortedSets设计技巧
阅读目录: 介绍 Score占位 更多位信息 总结 介绍 Redis Sorted Sets是类似Redis Sets数据结构,不允许重复项的String集合.不同的是Sorted Sets中的每个成 ...
随机推荐
- Python设计模式(11)-状态模式
# coding=utf-8 # *状态模式:一个方法的判断逻辑太长,就不容易修改.方法过长,其本质就是,# * 就是本类在不同条件下的状态转移.状态模式,就是将这些判断分开到各个能# * 表示当前状 ...
- floyd三重循环最外层为什么一定是K
Floyd算法为什么把k放在最外层? - 知乎 https://www.zhihu.com/question/30955032高票答案: 简单地总结一下:K没放在最外面一定是错的,但是在某些数据比较水 ...
- go中内存泄露的发现与排查
一,什么是内存泄漏 Go 中的并发性是以 goroutine(独立活动)和 channel(用于通信)的形式实现的.处理 goroutine 时,程序员需要小心翼翼地避免泄露.如果最终永远堵塞在 I/ ...
- SpringCloud系列之网关(Gateway)应用篇
@ 目录 前言 项目版本 网关访问 鉴权配置 限流配置 前言 由于项目采用了微服务架构,业务功能都在相应各自的模块中,每个业务模块都是以独立的项目运行着,对外提供各自的服务接口,如没有类似网关之类组件 ...
- 【题解】P2602 数字计数 - 数位dp
P2602 [ZJOI2010]数字计数 题目描述 给定两个正整数 \(a\) 和 \(b\) ,求在 \([a,b]\) 中的所有整数中,每个数码(digit)各出现了多少次. 输入格式 输入文件中 ...
- 解决利用hibernate连接mysql时无法插入汉字的问题
1.先修改mysql数据库的配置文件my.ini,此文件放在mysql安装文件的根目录下.找到default-character-set属性,并将其值更改为utf8(不是utf-8),将default ...
- react: typescript custom hooks useAsyncTable
define basic data: const SET_QUERY = "SET_QUERY"; const TOGGLE_LOADING = "TOGGLE_LOAD ...
- Python软件定时器APScheduler使用【软件定时器,非操作系统定时器,软件可控的定时器】【用途:定时同步数据库和缓存等】【刘新宇】
APScheduler使用 APScheduler (advanceded python scheduler)是一款Python开发的定时任务工具. 文档地址 https://apscheduler. ...
- Python之numpy,pandas实践
Jupyter Notebook(此前被称为 IPython notebook)是一个交互式笔记本,支持运行 40 多种编程语言. Jupyter Notebook 的本质是一个 Web 应用程序,便 ...
- 数据库SQL---数据库系统概论
1.基本术语 1)信息:指数据加工处理后有用的数据. 2)信息的3种世界: (1)现实世界:存在于人脑之外的客观世界. (2)信息世界:现实世界在人脑中的反映. (3)数据世界:将信息世界中的信息通过 ...