java - Redis 使 key 过期

标签 java redis jedis leaderboard sortedset

我有一些我的玩家的排行榜统计数据。排行榜有每日、每周和每月的统计数据。因此,我使用 Redis 及其过期功能来创建排行榜,但有件事我想知道。有没有什么方法可以让 key 过期,但如果 key 已经过期,它就不会碰它。如果该方法不存在,那么检查和设置它的性能更友好的方法是什么?我有很多键需要检查和设置,我不想减慢这个过程。

代码

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在 Java 中 Spring RedisTemplate hasKey API可以提供帮助。

处理 Redis key 的最佳实践是

  1. 检查 key 是否存在,如果可能会过期或使用它
  2. 设置键值
  3. 设置过期时间。一定要设置过期时间,否则你的 Redis 可能很快就会耗尽内存。

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

关于java - Redis 使 key 过期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61744725/

相关文章:

redis - 是否可以看到redis处理的所有请求?

java - 将 netty 与 jedis 一起使用时出错

java - JPA之上的模型框架

java - 带有 Java 客户端的键值数据库

python - 将 Python 应用程序连接到 Kubernetes 集群上的 Redis

redis - 如何从 Redis 服务器中清除超过 30 天的数据

java - 在生产代码中,无法验证请求参数或格式时的日志级别是多少

java - 作为过程的功能的动态(树形)结构(以及Clojure中的实现)

java - 刷新媒体扫描仪扫描的文本文件

java - 在 Java 中以流形式检索 Redis 值的示例