本篇博客是Redis系列的第6篇,主要讲解以下内容:

  1. 数据库数量
  2. 切换目标数据库
  3. 设置键的过期时间
  4. 移除键的过期时间

本系列的前5篇可以点击以下链接查看:

Redis系列(一):Redis简介及环境安装

Redis系列(二):Redis的5种数据结构及其常用命令

Redis系列(三):Redis的持久化机制(RDB、AOF)

Redis系列(四):Redis的复制机制(主从复制)

Redis系列(五):Redis的过期键删除策略

1. 数据库数量

默认情况下,Redis服务器有16个数据库,分别为db0~db15,如下图所示:

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

2. 切换目标数据库

默认情况下,我们执行的命令的目标数据库是db0,比如我们执行如下命令:

set message "Hello,Redis"

这个键值对会保存在数据库db0里,如下图所示:

如果想要切换目标数据库,可以使用SELECT命令,比如切换到db1,可以执行如下命令:

SELECT 1

然后执行如下图所示的命令:

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

在实际使用时,建议遵循以下规范:

  1. 各个应用使用不同的目标数据库
  2. 1个应用尽量不要操作多个目标数据库

3. 设置/移除键的过期时间

Redis提供了7个和key的过期时间相关的命令,分别如下所示:

  1. TTL
  2. PTTL
  3. EXPIRE
  4. PEXPIRE
  5. EXPIREAT
  6. PEXPIREAT
  7. PERSIST

接下来详细讲解每个命令的使用方法。

3.1 TTL

TTL是Time To Live的缩写,用来查看某个key的剩余生存时间,单位为秒。

如果key没有设置过期时间,返回-1。

如果key不存在,返回-2。

3.2 PTTL

PTTLTTL类似,也是用来查看某个key的剩余生存时间,但单位为毫秒。

如果key没有设置过期时间,返回-1。

如果key不存在,返回-2。

3.3 EXPIRE

EXPIRE命令用来给指定的key设置过期时间,单位为秒。

如果过期时间设置成功,返回1。

如果key不存在,返回0。

3.4 PEXPIRE

PEXPIREEXPIRE类似,也是用来给指定的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

PEXPIREATEXPIREAT类似,用来给指定的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设计与实现》

https://redis.io/commands

Redis系列(六):设置/移除键的过期时间的更多相关文章

  1. Redis 过期键的设置、获取和删除过期时间

    Redis 过期键的设置.获取和删除过期时间 转自http://blog.51cto.com/littledevil/1813956 设置过期 默认情况下键是没有生存时间的,也就是永不过期,除非清空内 ...

  2. Redis设置和更新Key的过期时间

    EXPIRE key seconds 为给定 key 设置生存时间,当 key 过期时(生存时间为 0 ),它会被自动删除. 在 Redis 中,带有生存时间的 key 被称为『易失的』(volati ...

  3. springBoot2.0+redis+fastJson+自定义注解实现方法上添加过期时间

    springBoot2.0集成redis实例 一.首先引入项目依赖的maven jar包,主要包括 spring-boot-starter-data-redis包,这个再springBoot2.0之前 ...

  4. 满足java对redis的所有操作,token,验证码过期时间等

    很实用 链接在此  https://www.cnblogs.com/edisonfeng/p/3571870.html System.out.println("=============== ...

  5. redis入门指南(三)—— 事务、过期时间、SORT命令、消息通知与管道

    写在前面 学习<redis入门指南>笔记,结合实践,只记录重要,明确,属于新知的相关内容. 事务 1.redis中的事务由一组命令的集合组成,要么都执行,要么都不执行,同时redis的事务 ...

  6. 设置一个严格的SESSION过期时间

    认识一:当我们需要更改session生存时间的时候通行的做法是更改php.ini文件中 1: ; Name of the session (used as cookie name). 2: sessi ...

  7. Redis系列六:redis相关功能

    一. 慢查询原因分析 与mysql一样:当执行时间超过阀值,会将发生时间耗时的命令记录 redis命令生命周期:发送 排队 执行 返回慢查询只统计第3个执行步骤的时间 预设阀值:两种方式,默认为10毫 ...

  8. Redis系列六 - 浅谈如何设计秒杀系统

    前言 设计一个系统之前,我们肯定要先确认系统业务场景是怎样的,下面就以某电商平台上的秒杀活动为场景,一起来探讨一个秒杀系统改如何去设计. 场景 我们现在要卖100件纸尿布,按照系统的用户量及以往经验来 ...

  9. Redis系列(六)-SortedSets设计技巧

    阅读目录: 介绍 Score占位 更多位信息 总结 介绍 Redis Sorted Sets是类似Redis Sets数据结构,不允许重复项的String集合.不同的是Sorted Sets中的每个成 ...

随机推荐

  1. 来说说Java中String 类的那些事情

    今天正好学校那边的任务不多,我就打算把Stirng 的有关知识点都总结在一起了,这样有利于知识的系统性,要不然学多了就会越来越杂,最主要的是总会忘记,记忆的时间太短了,通过这种方式,把它归纳在一起,写 ...

  2. tf.nn.conv2d 卷积

    tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None, name=None) 第一个参数input:指需要做卷积的输入 ...

  3. std::chrono计算程序运行时间

    void CalRunTime() { auto t1=std::chrono::steady_clock::now(); //run code auto t2=std::chrono::steady ...

  4. mysql 向上取整

    SELECT CEILING(10.0)    --->10 SELECT CEILING(10.1)    --->11

  5. Julia控制流

  6. commonJS、AMD和CMD之间的区别

    JS中的模块规范(CommonJS,AMD,CMD),如果你听过js模块化这个东西,那么你就应该听过或CommonJS或AMD甚至是CMD这些规范咯,我也听过,但之前也真的是听听而已. 现在就看看吧, ...

  7. Java数组模拟环形队列

    2.环形队列 (上一篇队列:https://www.cnblogs.com/yxm2020/p/12676323.html) 百度百科 1.假溢出 ​ 系统作为队列用的存储区还没有满,但队列却发生了溢 ...

  8. Linux下nginx自启动配置

    1.在linux系统的/etc/init.d/目录下创建nginx文件 vim /etc/init.d/nginx 在脚本中添加一下命令(内容主要参考官方文档) #!/bin/sh # # nginx ...

  9. Java 基础讲解

    Hello,老同学们,又见面啦,新同学们,你们好哦! 在看完本人的<数据结构与算法>专栏的博文的老同学,恭喜你们在学习本专栏时,你们将会发现好多知识点都讲解过,都易于理解,那么,没看过的同 ...

  10. 人体和电脑的关系——鸟哥的LINUX私房菜基础学习篇读书笔记

    CUP=脑袋: 每个人会做的事情都不一样(指令集的差异),但主要都是通过脑袋来判断与控制身体各部分的行动 内存=脑袋中存放正在思考的数据区块: 在实际活动过程中,我们的脑袋需要有外界刺激的数据(例如光 ...