当前位置: 首页 > news >正文

Redis中的hash数据结构设置过期时间的坑!!!

问题描述

 

在使用 Redis Hash 结构时,发现在异步操作完成后设置过期时间不生效,但在第一次写入后立即设置过期时间却可以正常工作。

问题复现

 

// 情况一:不生效
redisTemplate.opsForHash().put(uuid, "field1", value1);
redisTemplate.opsForHash().put(uuid, "field2", value2);
// ... 多次写入操作 ...
redisTemplate.expire(uuid, 300, TimeUnit.SECONDS);  // 设置可能不生效// 情况二:生效
redisTemplate.opsForHash().put(uuid, "field1", value1);
redisTemplate.expire(uuid, 300, TimeUnit.SECONDS);  // 立即设置生效
// ... 后续写入操作 ...

原因分析

 

1.  Redis Hash 的特性 ◦ Hash 结构的每次写入操作都可能影响 key 的状态 ◦ 多次写入后 key 的状态可能发生变化  

2.  过期时间检查 ◦ TTL 返回 -1:key 存在但没有过期时间 ◦ TTL 返回 -2:key 不存在 ◦ TTL > 0:剩余过期时间(秒)    

解决方案

 

1. 在首次写入时设置足够长的过期时间

// 设置初始数据和过期时间
redisTemplate.opsForHash().put(uuid, "pdfPath", pdfPath);
redisTemplate.expire(uuid, 900, TimeUnit.SECONDS);  // 15分钟足够处理完成// 后续异步操作
CompletableFuture.supplyAsync(() -> {redisTemplate.opsForHash().put(uuid, "otherField", value);return result;
});

 2.定期检查 key 状态

Long ttl = redisTemplate.getExpire(uuid);
if (ttl == -1) {log.warn("Key {} 存在但没有过期时间", uuid);
} else if (ttl == -2) {log.warn("Key {} 不存在", uuid);
}

最佳实践

 

1. 评估操作耗时,设置合适的过期时间

2. 在首次写入时设置过期时间

3. 避免在多次写入后设置过期时间

4. 添加状态监控和日志记录  总结 在使用 Redis Hash 结构时,建议在创建时就设置合适的过期时间,而不是在多次操作后再设置。这样可以确保数据在整个处理过程中的可靠性和可用性。

相关文章:

  • [Windows] 实用多功能工具箱 灵溪工具箱0.1.1
  • 23种设计模式-行为型模式之模版方法模式(Java版本)
  • 云原生之认识DDD
  • 100.HTB-Meow
  • BBRv2,v3 吞吐为什么不如 BBRv1
  • Java微服务架构设计与实践 - 面试实战
  • 把dll模块注入到游戏进程的方法_插APC注入
  • 【金仓数据库征文】从云计算到区块链:金仓数据库的颠覆性创新之路
  • 秒出PPT推出更强版本,AI PPT工具进入新纪元!
  • 6.学习笔记-SpringMVC-拦截器(P71-P74)
  • # 代码随想录算法训练营Day37 | Leetcode300.最长递增子序列、674.最长连续递增序列、718.最长重复子数组
  • 在 MySQL 中,索引前缀长度为什么选择为 191
  • Java24新增特性
  • OpenHarmony 开源鸿蒙北向开发——hdc工具使用及常用命令(持续更新)
  • 504 nginx解决方案
  • 机器学习基础 - 分类模型之SVM
  • “Daz to Unreal”将 G8 角色(包括表情)从 daz3d 导入到 UE5。在 UE5 中,我发现使用某个表情并与闭眼混合后,上眼睑出现了问题
  • PostgreSQL性能优化实用技巧‌
  • NLP高频面试题(五十二)——深度学习优化器详解
  • Java面试实战:电商场景下的Spring Cloud微服务架构与缓存技术剖析
  • “网红”谭媛去世三年:未停更的账号和困境中的家庭
  • 魔都眼·上海车展④|奔驰宝马保时捷……全球豪车扎堆首秀
  • 2024年度全国十大考古新发现公布,武王墩一号墓等入选
  • 继续免费通行!五一假期全国高速公路日均流量约6200万辆
  • 融入长三角一体化发展,苏南名城镇江的优势和机遇何在
  • 福建海警位金门附近海域依法开展常态化执法巡查