2016-03-29 14 views
0

最後に10秒で追加されたアイテムがカウント10を終了するかどうかをチェックするユニティリティを書いています。10アイテム以上が追加された場合、アプリは例外をスローします10秒以内にリストする。 Redisには、setまたはlistの各要素に生きる時間を追加する仕組みがありません。この問題を回避するために、私はRedisの各呼び出しで現在のMillisを混在形式で保存しています。ユーザーがリストにアイテムを追加するたびに、アイテムのタイムスタンプとcurrenttimestampの差が10秒を超えるかどうかをチェックします。そうでない場合、私は操作をブロックする。System.currentMillはJavaの期限切れアイテムを奪うために

これは機能しますが、私はこれを行うためのより良い方法を探しています。このプロセスで問題がある場合はフィードバックが必要です

+0

Redis [ソートセット](http://redis.io/topics/data-types#sorted-sets)を使用すると、これを実行できます。並べ替えられたセットは、注文に数値スコアを使用します。タイムスタンプを使用することにより、その機能が得られます。私が読んだところでは、分散/リモート・アスペクトについて言及していないので、おそらく一般的なJavaメモリー内のユーティリティがあなたのケースに最も適しています。 – mp911de

答えて

0

LRU(Least Recently Used)キャッシュが必要です。 あなたが検索した場合、これはWeb上にたくさん実装されています。

はここに1つの実装実現する方法の非常に単純な例です。これにより

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; 
    } 
} 

、あなたは現金と最も古いエントリが削除されますに項目を追加することができます。 アイテムがキャッシュに存在するかどうかをチェックして、アイテムがキャッシュに最近格納されているかどうかを確認することもできます。

希望に役立ちます。

+0

実際に私の質問は少し異なります。最も古いエントリは重要ではありません。 10回以上のエントリが追加された場合、私の要件は「10秒未満」です。これを認識して例外をスローする必要があります。そして、あなたのコードが私を助けないように、m appは配備されています。 –

関連する問題