当前位置: 首页> 健康> 母婴 > 网上办理公司注册登记注册_制作社交app软件要多少钱_中国十大电商公司排名_长沙专业网络推广公司

网上办理公司注册登记注册_制作社交app软件要多少钱_中国十大电商公司排名_长沙专业网络推广公司

时间:2025/9/8 5:40:49来源:https://blog.csdn.net/m0_62458145/article/details/147471769 浏览次数:0次
网上办理公司注册登记注册_制作社交app软件要多少钱_中国十大电商公司排名_长沙专业网络推广公司

问题描述

 

在使用 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 结构时,建议在创建时就设置合适的过期时间,而不是在多次操作后再设置。这样可以确保数据在整个处理过程中的可靠性和可用性。

关键字:网上办理公司注册登记注册_制作社交app软件要多少钱_中国十大电商公司排名_长沙专业网络推广公司

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: