新闻详情

新闻详情

首页 / 资讯中心 / 详情

Redis命令:HPERSIST

发布时间:2026/10/2 15:22:34来源:尧图网络
Redis命令:HPERSIST
Redis HPERSIST 命令详细教程HPERSIST移除 Hash 中一个或多个字段的过期时间把字段从“易失”变为“永久”。它从 Redis 7.4.0 起提供只读不写数据本身只改动过期元数据。资料合集https://pan.quark.cn/s/10e98d308913、https://pan.quark.cn/s/f56bc69c5338一、概览与语法HPERSIST key FIELDS numfields field [field ...]项目说明数据类型Hash 的字段级过期时间支持版本Redis 7.4.0 起key一个 Hash KeyFIELDS必填关键字不可省略numfields字段数量必须与后续字段参数个数一致field至少一个字段名不支持通配符返回值数组元素顺序与输入字段一致时间复杂度O(N)N 为指定字段数量ACLwrite、hash、fast命令标记write、fast命令描述中给出了术语定义带有过期时间的字段称为 volatile易失移除后成为 persistent永久不再关联 TTL。$TRAE_REF二、逐字段返回值数值含义-2该字段不存在或整个 Key 不存在-1该字段存在但本来就没有过期时间1成功移除了该字段的过期时间即使只指定一个字段也返回数组不能当成单个整数处理。-1与-2的区别很关键前者表示字段存在且已是永久状态操作无效果但数据正常后者表示字段根本不存在。$TRAE_REF三、基础示例以下命令需要 Redis 7.4 或更新版本在测试实例的 redis-cli 中执行。文中结果是预期说明未实际连接 Redis 运行。DEL tutorial:{hpersist}:profile HSET tutorial:{hpersist}:profile name Alice temp draft HEXPIRE tutorial:{hpersist}:profile 300 FIELDS 2 name temp HTTL tutorial:{hpersist}:profile FIELDS 2 name temp HPERSIST tutorial:{hpersist}:profile FIELDS 1 temp HTTL tutorial:{hpersist}:profile FIELDS 2 name temp HPERSIST tutorial:{hpersist}:profile FIELDS 2 name absent预期结果HEXPIRE 返回[1, 1]第一次 HTTL 返回两个递减的正数HPERSIST 对 temp 返回[1]第二次 HTTL 中 temp 变为-1name 仍为正数最后一次 HPERSIST 返回[1, -2]name 被成功转为永久absent 因不存在返回 -2。四、字段 TTL 与 Key TTL 的区别这是最容易混淆的地方。HPERSIST 只作用于字段级过期时间不影响整个 Key 的过期时间。操作对象设置命令查询命令移除命令Hash 字段HEXPIRE、HPEXPIRE、HEXPIREAT、HPEXPIREATHTTL、HPTTL、HEXPIRETIME、HPEXPIRETIMEHPERSIST整个 KeyEXPIRE、PEXPIRE、EXPIREAT、PEXPIREATTTL、PTTL、EXPIRETIME、PEXPIRETIMEPERSISTDEL tutorial:{hpersist}:two HSET tutorial:{hpersist}:two a 1 EXPIRE tutorial:{hpersist}:two 600 HEXPIRE tutorial:{hpersist}:two 300 FIELDS 1 a TTL tutorial:{hpersist}:two HTTL tutorial:{hpersist}:two FIELDS 1 a HPERSIST tutorial:{hpersist}:two FIELDS 1 a TTL tutorial:{hpersist}:two HTTL tutorial:{hpersist}:two FIELDS 1 a预期结果TTL 约为 600HTTL 约为 300两者独立存在HPERSIST 后 HTTL 变为-1但 TTL 仍约为 600说明 Key 级过期时间未受影响。要让整个 Key 永久有效应使用 PERSIST。五、边界情况与错误处理场景行为Key 不存在按输入字段数返回多个 -2字段不存在该项返回 -2字段存在但无 TTL该项返回 -1属于“无需操作”而非失败字段有 TTL该项返回 1TTL 被移除值保持不变Key 是 String、List 等非 Hash报 WRONGTYPE 错误numfields 与实际字段数不符报语法错误未写 FIELDS 关键字报语法错误HPERSIST 不会改变字段的值也不会改变 Key 的 TTL。若字段已经到期它的表现与不存在一致返回 -2无法“复活”已删除的数据。六、客户端示例前提为已安装 redis-py 且服务端为 Redis 7.4 或更新版本。使用通用接口显式展示 FIELDS 语法。importredis rredis.Redis(hostlocalhost,port6379,decode_responsesTrue)ktutorial:{hpersist}:pythontry:r.delete(k)r.hset(k,mapping{a:A,b:B})r.execute_command(HEXPIRE,k,300,FIELDS,2,a,b)fields[a,absent]resultr.execute_command(HPERSIST,k,FIELDS,len(fields),*fields)print(result)# [1, -2]forname,valueinzip(fields,result):ifvalue1:print(name,已转为永久)elifvalue-1:print(name,本来就是永久)else:print(name,不存在)print(r.execute_command(HTTL,k,FIELDS,2,a,b))# [-1, 约300]finally:r.delete(k)r.close()七、并发、原子性与适用场景HPERSIST 对多个字段原子执行但“先 HTTL 判断再 HPERSIST”是跨命令流程中间可能有其他客户端重新设置 TTL 或删除字段。需要严格条件操作时应使用脚本或事务设计。典型场景把原本设了短 TTL 的字段在满足某条件后转为长期有效例如支付完成后把订单缓存字段转永久、修正误设的过期时间、在数据迁移前冻结字段生命周期。需要注意的是转为永久意味着该字段将一直占用内存直到被显式删除或整个 Key 消失把大量字段转为永久会削弱缓存自动清理的效果应配合容量规划。八、练习、排错与总结练习新建tutorial:{hpersist}:exercise写入 a1、b2用HEXPIRE ... 300 FIELDS 2 a b设置字段 TTL执行HPERSIST ... FIELDS 2 a absent预期返回[1, -2]用 HTTL 确认 a 为 -1、b 仍为正数最后执行PERSIST观察 Key 级 TTL 的变化理解两级过期的独立性。排错要点返回 -1 表示字段本来就永久不是失败返回 -2 表示字段或 Key 不存在可用 HEXISTS 与 EXISTS 区分unknown command 时确认服务端版本不低于 7.4HTTL 仍有数值说明命令未作用到该字段检查字段名拼写与 numfields 是否匹配。清理使用DEL tutorial:{hpersist}:profile tutorial:{hpersist}:two tutorial:{hpersist}:exercise。速记7.4 起支持、移除字段 TTL 而非 Key TTL、返回 -2/-1/1、不改变字段值、大量转永久需评估内存。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

AI工程化实战:四语言分层架构与端到端CI/CD流水线 2026/10/2 16:06:54

AI工程化实战:四语言分层架构与端到端CI/CD流水线

1. 从零开始构建AI工程体系:这不是写几个模型脚本,而是搭一条生产线“AI Engineering from Scratch”——这个标题乍看像极了某门MOOC课程的副标题,但如果你真把它当成“手把手教你用PyTorch跑个MNIST”,那大概率会在第三天就卡在…

阅读更多 →
蓝牙芯片驱动开发-第6章第7题-SCO语音数据流中的同步机制如何实现 2026/10/2 16:06:54

蓝牙芯片驱动开发-第6章第7题-SCO语音数据流中的同步机制如何实现

蓝牙面试题解析:SCO 语音数据流中的同步机制如何实现? 难度:⭐⭐⭐⭐ 较难 | 场景:社招二面/三面、蓝牙语音驱动 | 高频:🔥🔥🔥🔥 标准答案 SCO 语音数据的同步通过 时间戳管理 + 硬件同步信号 + 抖动缓冲 + 时钟校准 实现: ① 同步失调的表现 发送设备 (蓝牙…

阅读更多 →
EACCES 权限拒绝排查:Android 10/11 分区存储适配完全指南 2026/10/2 16:06:54

EACCES 权限拒绝排查:Android 10/11 分区存储适配完全指南

深夜十一点,测试群里飞出来一张截图,日志里躺着一行再熟悉不过的异常:java.io.IOException: open failed: EACCES (Permission denied)我的第一反应是“运行时权限没申请吧”,可翻了代码,Manifest 里明明写着READ_EXTE…

阅读更多 →
BLE蓝牙开发从底层机制到工程实战:连接、GATT、低功耗与调试全解析 2026/10/2 16:06:54

BLE蓝牙开发从底层机制到工程实战:连接、GATT、低功耗与调试全解析

1. 从频段、调制到拓扑:先把BLE的底层骨架搭清楚这两年跟蓝牙打交道的时间越长,越觉得一个扎心的现实是:很多人项目卡住,不是API用错了,而是对BLE的底层机制理解停留在“能用就行”的层面。这次我把BLE技术体系里真正影…

阅读更多 →
Go 限流方案:令牌桶 / 滑动窗口 / 自适应限流全解 2026/10/2 16:06:48

Go 限流方案:令牌桶 / 滑动窗口 / 自适应限流全解

Go 限流方案:令牌桶 / 滑动窗口 / 自适应限流全解高并发服务必须有限流。三种常见算法对比,看懂场景再选。一、令牌桶:经典而稳定 import "golang.org/x/time/rate"limiter : rate.NewLimiter(10, 20) // 速率10/s,桶容…

阅读更多 →
Qt动态库加载:pro文件与QLibrary两种方式深度对比 2026/10/2 16:06:41

Qt动态库加载:pro文件与QLibrary两种方式深度对比

1. 动态库在Linux下的工作方式:先搞懂链接器在干什么在正式对比pro工程文件与QLibrary两种加载方式之前,我建议先把Linux下动态库的基本机制过一遍。因为很多人在使用过程中遇到的"编译过了但运行报错""加载失败"这类问题&#xff0…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉