java - System.currentMillis 用于跟踪 java 中的过期项目

标签 java jakarta-ee redis

我正在编写一个单元,它将检查在过去 10 秒内添加的项目是否超过计数 10 的限制。如果在 10 秒内添加超过 10 个项目,我的应用程序将抛出异​​常。 Redis 没有机制来为集合或列表中的每个元素添加生存时间。为了解决这个问题,我在 Redis 中的每个调用中以连接格式存储当前的 Millis。每当用户在列表中添加一个项目时,我都会检查 10 个项目的时间戳和当前时间戳的差异是否大于 10 秒,我让它通过。如果不是,我将阻止该操作。

虽然这可行,但我正在寻找一种更好的方法来做到这一点。如果在此过程中有任何问题,需要反馈

最佳答案

您只需要一个 LRU(最近最少使用)缓存。 如果您搜索一下,网络上有很多这方面的实现。

这是一个非常简单的例子,说明如何完成实现:

import java.util.LinkedHashMap;
import java.util.Map;

public LRUCache<K, V> extends LinkedHashMap<K, V> {
    private int cacheSize;

    public LRUCache(int cacheSize) {
      super(16, 0.75, true);
      this.cacheSize = cacheSize;
    }

    protected boolean removeEldestEntry(Map.Entry<K, V> eldest) {
      return size() >= cacheSize;
   }
}

有了这个,您可以将一个项目添加到现金中,最旧的条目将被删除。 您还可以检查某个项目是否存在于缓存中,以确定它最近是否已存储在缓存中。

希望对您有所帮助。

关于java - System.currentMillis 用于跟踪 java 中的过期项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36274129/

相关文章:

java - 是否存在用于发现 Java 库的事实上的注册表?

java - 不同类方法的组合

nosql - 存储大量二进制文件应该用redis吗?

ruby-on-rails - 如何从后端同步 Redis 服务器和 Rails 数据库?

java - 从 arrayList 索引访问类字段?

java - 有没有一种在度量空间中聚类的方法?

java - Spring MVC传入参数 @RequestParam String requestURL

java - 获取JPA中实体的id而不从数据库中提取实体?

jakarta-ee - 检查JTA事务是否提交成功

redis-python db=0 参数用来做什么?