2016-03-29 5 views
0

Ich schreibe eine Einheitlichkeit, die prüfen wird, ob die Elemente hinzugefügt in den letzten 10 Sekunden exc endet das Limit von Count 10. Meine App wird eine Ausnahme auslösen, wenn mehr als 10 Elemente hinzugefügt wird dann innerhalb von 10 Sekunden auflisten. Redis verfügt nicht über einen Mechanismus zum Hinzufügen von Zeit zum Leben auf jedem Element in Set oder Liste. Um dies zu umgehen, speichere ich bei jedem Anruf in Redis aktuelle Millis im Concate-Format. Immer wenn Benutzer ein Element in der Liste hinzufügen, überprüfe ich, ob der Zeitstempel und die Differenz des aktuellen Zeitstempels größer als 10 Sekunden sind. Wenn nicht, blockiere ich den Vorgang.System.currentMillis zu keeptrackof abgelaufene Elemente in Java

Obwohl dies funktioniert, suche ich nach einem besseren Weg, dies zu tun. Und brauchen eine Rückmeldung, wenn es ein Problem in diesem Prozess geben kann

+0

Sie können dazu Redis [Sortierte Sets] (http://redis.io/topics/data-types#sorted-sets) verwenden. Sortierte Sätze verwenden eine numerische Punktzahl für die Bestellung. Mit dem Zeitstempel erhalten Sie diese Funktion. Von dem, was ich gelesen habe, erwähnen Sie keinen verteilten/entfernten Aspekt, also könnte ein übliches Java-In-Memory-Util am besten zu Ihrem Fall passen. – mp911de

Antwort

0

Alles, was Sie brauchen, ist ein LRU (Least Recently Used) Cache. Es gibt viele Implementierungen davon im Internet, wenn Sie suchen.

Hier ist ein sehr einfaches Beispiel, wie man erreichen Umsetzung:

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

Mit diesem können Sie ein Element in die Zahlungsmittel und der älteste Eintrag entfernt wird hinzuzufügen. Sie können auch überprüfen, ob ein Element im Cache vorhanden ist, um festzustellen, ob es kürzlich im Cache gespeichert wurde.

Hoffnung, das hilft.

+0

eigentlich ist meine Frage etwas anders. ältester Eintrag ist nicht wichtig. Mein Requirment ist "weniger als 10 Sekunden, wenn mehr als 10 Einträge hinzugefügt werden" Ich muss es erkennen und eine Ausnahme auslösen. Und m App wird verschenkt, damit dein Code mir nicht hilft. –

Verwandte Themen