系列教程导航

  1. 如何在 Ubuntu 18.04 上安装和保护 Redis
  2. 如何连接到 Redis 数据库
  3. 如何管理 Redis 数据库和 Keys
  4. 如何在 Redis 中管理副本和客户端
  5. 如何在 Redis 中管理字符串
  6. 如何在 Redis 中管理 List
  7. 如何在 Redis 中管理 Hashes
  8. 如何在 Redis 中管理 Sets
  9. 如何在 Redis 中管理 Sorted Sets
  10. 如何在 Redis 中运行事务
  11. 如何使 Redis 中的 Key 失效
  12. 如何解决 Redis 中的故障
  13. 如何从命令行更改 Redis 的配置
  14. Redis 数据类型简介

介绍

Redis 是一个开源的内存中键值数据存储系统。默认情况下,Redis 的键(Key)是持久化的,这意味着除非手动删除,否则 Redis 服务器将一直存储它们。但在某些场景下,您可能希望键在设定的一段时间后自动删除,即让键具有可变性(Volatile)。本教程将说明如何设置键的过期时间、如何检查键的剩余存活时间,以及如何取消键的过期设置。

如何使用本指南

本指南以备有完整示例的备忘单形式编写。您可以直接跳转至与您任务相关的任何部分。

本指南中显示的命令已在运行 Redis 4.0.9 版本的 Ubuntu 18.04 服务器上进行了测试。要设置类似的环境,您可以按照我们的指南 如何在 Ubuntu 18.04 上安装和保护 Redis步骤 1 进行操作。我们将通过使用 redis-cli(Redis 命令行界面)运行命令来演示其行为。

请注意,如果您使用其他 Redis 客户端(例如 Redli),某些命令的确切输出可能会有所不同。

另外,您也可以使用托管的 Redis 数据库实例来测试这些命令。但请注意,根据数据库提供者允许的控制级别,本指南中的某些命令可能无法按所述方式工作。要配置 DigitalOcean 托管数据库,请遵循我们的 托管数据库产品文档。然后,您必须 安装 Redli 设置 TLS 隧道 才能通过 TLS 连接到托管数据库。

设置键的过期时间

您可以使用 expire 命令设置现有键的过期时间。该命令接受键名和直到过期的秒数作为参数。为了证明这一点,请运行以下两个命令。第一条命令创建一个名为 key_melon 的字符串键,值为 "cantaloupe";第二条命令将其设置为在 450 秒后超时:

set key_melon "cantaloupe"
expire key_melon 450

如果成功设置了超时,expire 命令将返回 (integer) 1。如果设置超时失败(例如键不存在),它将返回 (integer) 0

或者,您可以使用 expireat 命令将键设置为在特定的时间点过期。它使用 Unix 时间戳 作为参数,而不是到期前的秒数。Unix 时间戳是自 _Unix 纪元_(即 1970 年 1 月 1 日 UTC 00:00:00)以来的秒数。可以使用许多在线工具来查找特定日期和时间的 Unix 时间戳,例如 EpochConverterUnixTimestamp.com

例如,要设置 key_melon 为在 2025 年 5 月 1 日格林尼治标准时间晚上 8:30 到期(对应的 Unix 时间戳为 1746131400),可以使用以下命令:

expireat key_melon 1746131400

请注意,如果传递给 expireat 的时间戳已经发生,它将立即删除该键。

检查键的剩余过期时间

在任何时候,您都可以检查键距离过期还有多少时间(以秒为单位)。可以使用 ttl 命令,其全称为 "Time To Live":

ttl key_melon

输出示例:

(integer) 433

有关更详细的信息,可以运行 pttl 命令,它将返回直到键过期的时间(以毫秒为单位):

pttl key_melon

输出示例:

(integer) 431506

如果键尚未设置为过期,ttlpttl 都将返回 (integer) -1。如果键不存在,两者都将返回 (integer) -2

使键持久化

如果键已设置为过期,任何覆盖键内容的命令(例如 setgetset)都会清除键的超时值。若要手动清除键的超时设置使其永久保存,请使用 persist 命令:

persist key_melon

如果成功完成,persist 命令将返回 (integer) 1,表明该键将不再过期。

结论

本指南详细介绍了用于在 Redis 中操作和检查键持久性的许多命令。如果您想在本指南中概述其他相关的命令、参数或过程,请在下面的评论中提出疑问或提出建议。

有关 Redis 命令的更多信息,请参阅关于 如何管理 Redis 数据库的 系列教程。

说明:本文内容基于 Redis 4.0.9 版本及 Ubuntu 18.04 环境测试。不同版本的 Redis 可能在命令行为或输出格式上略有差异,请以官方文档为准。