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 密钥的最佳做法是

  1. 检查密钥是否存在,如果可能过期或使用它
  2. 设置键值
  3. 设置过期时间。始终设置过期时间,否则,您的 Redis 可能 运行 很快就会内存不足。

如果您在多线程中使用 Redis,那就是另一回事了。你必须使用 Redis 锁。