我需要检测事件频率,例如在 X 秒内发生了 N 个相同的事件。
我的检测过程 24/7 连续执行。
我最初的设计采用了 a ConcurrentHashMap,key 是一个自定义值对象,代表事件标识,值是Joda DateTime事件发生的时间。
这种方法可以很好地检测事件频率,但是我还必须实施一个驱逐过程来删除“陈旧”事件。
谷歌搜索我发现的一种改进方法com.google.common.cache.Cache,它看起来很有希望,因为它的相关CacheBuilder有.expireAfter#####(),但是所有 Cache 的 get 方法都被弃用了。显然我必须使用LoadingCache.
方法的所有示例都LoadingCache load()显示了通过访问数据库或其他“昂贵”操作来检索要加载的值。这些都不适合我的用例。我有填充缓存所需的键和值,当我的值不驻留在后端数据存储中时,如何在缓存未命中时“加载”我的事件?
我应该使用cache.put(Key, Value)吗?