我需要检测事件频率,例如在 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)
吗?