Redis(17)如何在Redis中设置键的过期时间?

在 Redis 中,设置键的过期时间可以通过多种命令实现。以下是几个常用命令及其详细说明,并结合示例代码展示如何设置和管理键的过期时间。

1. EXPIRE - 为给定键设置过期时间(以秒为单位)

EXPIRE 命令用于为给定键设置过期时间,时间以秒为单位。

bash 复制代码
EXPIRE key seconds

示例:

bash 复制代码
SET mykey "Hello"
EXPIRE mykey 10  # 设置 mykey 在 10 秒后过期

2. PEXPIRE - 为给定键设置过期时间(以毫秒为单位)

PEXPIRE 命令用于为给定键设置过期时间,时间以毫秒为单位。

bash 复制代码
PEXPIRE key milliseconds

示例:

bash 复制代码
SET mykey "Hello"
PEXPIRE mykey 5000  # 设置 mykey 在 5000 毫秒(5 秒)后过期

3. EXPIREAT - 为给定键设置过期时间(指定具体的时间戳)

EXPIREAT 命令用于为给定键设置过期时间,时间戳以秒为单位。

bash 复制代码
EXPIREAT key timestamp

示例:

bash 复制代码
SET mykey "Hello"
EXPIREAT mykey 1672531199  # 设置 mykey 在指定的时间戳过期

4. PEXPIREAT - 为给定键设置过期时间(指定具体的时间戳,以毫秒为单位)

PEXPIREAT 命令用于为给定键设置过期时间,时间戳以毫秒为单位。

bash 复制代码
PEXPIREAT key timestamp

示例:

bash 复制代码
SET mykey "Hello"
PEXPIREAT mykey 1672531199000  # 设置 mykey 在指定的时间戳过期

5. TTL - 获取键的剩余生存时间(以秒为单位)

TTL 命令用于获取键的剩余生存时间,时间以秒为单位。

bash 复制代码
TTL key

示例:

bash 复制代码
SET mykey "Hello"
EXPIRE mykey 10
TTL mykey  # 返回 mykey 的剩余生存时间

6. PTTL - 获取键的剩余生存时间(以毫秒为单位)

PTTL 命令用于获取键的剩余生存时间,时间以毫秒为单位。

bash 复制代码
PTTL key

示例:

bash 复制代码
SET mykey "Hello"
PEXPIRE mykey 5000
PTTL mykey  # 返回 mykey 的剩余生存时间

7. PERSIST - 移除键的过期时间

PERSIST 命令用于移除键的过期时间,使键永久存在。

bash 复制代码
PERSIST key

示例:

bash 复制代码
SET mykey "Hello"
EXPIRE mykey 10
PERSIST mykey  # 移除 mykey 的过期时间
TTL mykey  # 返回 -1,表示 mykey 不会过期

综合示例

下面是一个结合多个命令的完整示例,展示如何设置、检查和移除键的过期时间:

bash 复制代码
# 启动 Redis CLI
redis-cli

# 设置键并指定过期时间
SET mykey "Hello"
EXPIRE mykey 10  # 设置 mykey 在 10 秒后过期

# 获取剩余失效时间
TTL mykey  # 应返回一个正整数,表示剩余秒数

# 等待几秒后再检查
SLEEP 5  # 等待 5 秒
TTL mykey  # 应返回一个小于 10 的正整数,表示剩余秒数

# 移除键的过期时间
PERSIST mykey
TTL mykey  # 应返回 -1,表示 mykey 不会过期

# 重新设置键并指定过期时间(以毫秒为单位)
PEXPIRE mykey 5000  # 设置 mykey 在 5000 毫秒(5 秒)后过期
PTTL mykey  # 应返回一个接近 5000 的正整数,表示剩余毫秒数

# 等待几秒后再检查
SLEEP 3  # 等待 3 秒
PTTL mykey  # 应返回一个接近 2000 的正整数,表示剩余毫秒数

# 设置键并指定具体的过期时间戳
SET mykey "Hello"
EXPIREAT mykey 1672531199  # 设置 mykey 在指定的时间戳过期
TTL mykey  # 返回 mykey 的剩余生存时间,具体数值根据当前时间而定

# 重新设置键并指定过期时间戳(以毫秒为单位)
SET mykey "Hello"
PEXPIREAT mykey 1672531199000  # 设置 mykey 在指定的毫秒时间戳过期
PTTL mykey  # 返回 mykey 的剩余生存时间,具体数值根据当前时间而定

注意事项

  1. 时间精度EXPIREEXPIREAT 使用秒为单位,而 PEXPIREPEXPIREAT 使用毫秒为单位。
  2. TTL 和 PTTL 返回值
    • 正整数:表示剩余的生存时间。
    • -1:表示键没有设置过期时间。
    • -2:表示键不存在。
  3. 持久化 :通过 PERSIST 命令可以移除键的过期时间,使其永久存在。

总结

通过 Redis 提供的各种命令,可以灵活地管理键的过期时间。无论是设置相对时间还是绝对时间,Redis 都提供了相应的命令来满足需求。这些命令的结合使用,可以帮助你精细地控制键的生存时间,保证数据的有效性和一致性。

相关推荐
笃行3505 小时前
向量数据库单独建一套,这笔账划不划算
后端
weixin_431600445 小时前
Agent Workflow 学习向:Code 节点,比模板更强的变量加工
后端·python·学习·ai·
Rain的Java大神之路6 小时前
短信接口被狂刷怎么处理
java·运维·后端·web安全·面试·架构·xss
Lost of 程序猿6 小时前
AOP 实战:面向切面编程从理论到落地
后端·asp.net·aop·面向切片变成
Lost of 程序猿7 小时前
ASP.NET Core 认证授权实战:从 JWT 到 Policy,设计一套企业级 RBAC 权限系统
后端·asp.net
Lost of 程序猿7 小时前
ASP.NET Core 后台任务全景:从 BackgroundService 到 Channel 队列,再到分布式调度
后端·asp.net·.netcore
倾颜7 小时前
NestJS 核心概念梳理:从 Module、Controller 到 Guard、Interceptor
后端·node.js·nestjs
东风破_8 小时前
JWT 1:从一个登录请求开始,理解 React 项目里的 API 层与 Mock
前端·后端
东风破_8 小时前
JWT 3:为什么 Token 要放进 Authorization?Axios 拦截器到底解决了什么?
前端·后端
东风破_8 小时前
JWT 5:路由守卫是什么?把整个 JWT 登录鉴权流程串起来
前端·后端