Redis 过期键
Redis expire keys
我有我的玩家的一些排行榜统计数据。排行榜有每日、每周和每月的统计数据。因此,我将 redis 及其过期功能用于排行榜,但有一件事我想知道。有没有什么方法可以使密钥过期,但如果密钥已经过期,它就不会触及它。如果该方法不存在,那么检查和设置它的性能更友好的方法是什么?我有很多键需要检查和设置我不想减慢这个过程。
代码
try (Jedis resource = redisManager.getResource()) {
Pipeline pipeline = resource.pipelined();
pipeline.multi();
for (PlayerData playerData : playerDataList) {
if (playerData.getKill() > 0) {
pipeline.zincrby("game.kill.total", playerData.getKill(), playerData.getId());
pipeline.zincrby("game.kill.monthly", playerData.getKill(), playerData.getId());
pipeline.zincrby("game.kill.weekly", playerData.getKill(), playerData.getId());
}
}
//if the key doesn't have expire date, add expire date to key.
pipeline.exec();
}
如果你输入的Redis过期了,Redis会在内部处理,定期删除它们。检查 official document
Redis exist
API 可以帮助检查key是否存在。 doc In Java Spring RedisTemplate hasKey API 可以提供帮助。
处理 Redis 密钥的最佳做法是
- 检查密钥是否存在,如果可能过期或使用它
- 设置键值
- 设置过期时间。始终设置过期时间,否则,您的 Redis 可能 运行 很快就会内存不足。
如果您在多线程中使用 Redis,那就是另一回事了。你必须使用 Redis 锁。
我有我的玩家的一些排行榜统计数据。排行榜有每日、每周和每月的统计数据。因此,我将 redis 及其过期功能用于排行榜,但有一件事我想知道。有没有什么方法可以使密钥过期,但如果密钥已经过期,它就不会触及它。如果该方法不存在,那么检查和设置它的性能更友好的方法是什么?我有很多键需要检查和设置我不想减慢这个过程。
代码
try (Jedis resource = redisManager.getResource()) {
Pipeline pipeline = resource.pipelined();
pipeline.multi();
for (PlayerData playerData : playerDataList) {
if (playerData.getKill() > 0) {
pipeline.zincrby("game.kill.total", playerData.getKill(), playerData.getId());
pipeline.zincrby("game.kill.monthly", playerData.getKill(), playerData.getId());
pipeline.zincrby("game.kill.weekly", playerData.getKill(), playerData.getId());
}
}
//if the key doesn't have expire date, add expire date to key.
pipeline.exec();
}
如果你输入的Redis过期了,Redis会在内部处理,定期删除它们。检查 official document
Redis exist
API 可以帮助检查key是否存在。 doc In Java Spring RedisTemplate hasKey API 可以提供帮助。
处理 Redis 密钥的最佳做法是
- 检查密钥是否存在,如果可能过期或使用它
- 设置键值
- 设置过期时间。始终设置过期时间,否则,您的 Redis 可能 运行 很快就会内存不足。
如果您在多线程中使用 Redis,那就是另一回事了。你必须使用 Redis 锁。