イベントの頻度を検出する必要があります。たとえば、X 秒以内に N 個の同一のイベントが発生しました。
私の検出プロセスは 24 時間 365 日継続的に実行されます。
私の初期設計ではConcurrentHashMap
、キーはイベント ID を表すカスタム値オブジェクトであり、値はJoda DateTime
イベントが発生したときの値です。
このアプローチは、イベント頻度の検出にはうまく機能しましたが、「古い」イベントを削除するためのエビクション プロセスも実装する必要がありました。
私が発見した改善されたアプローチをグーグルで検索するとcom.google.common.cache.Cache
、関連するものとして有望に見えましたCacheBuilder
が.expireAfter#####()
、キャッシュのすべての get メソッドは非推奨です。どうやら私は使用する必要がありますLoadingCache
。
メソッドのすべての例はLoadingCache
load()
、データベースまたはその他の「高価な」操作にアクセスして、ロードする値を取得することを示しています。これらのどれも私のユースケースに適合しません。キャッシュに入力する必要があるキーと値があります。値がバックエンド データストアに存在しない場合、キャッシュ ミスでイベントを「ロード」するにはどうすればよいですか?
私は使用することになっていますcache.put(Key, Value)
か?