Warteschlange mit zeitgestempelten Elementen innerhalb eines Zeitraums

8

Ich möchte in einer Warteschlange speichern, Datenstruktur spielt keine Rolle, nur die Elemente, die ich eingefügt habe, sagen die letzten 5 Minuten von der aktuellen Zeit. Alles, was älter ist, sollte entfernt werden - so dass jedes Mal, wenn ich die Größe der Warteschlange erhalte, die Objekte zählen, die in den letzten 5 Minuten eingefügt wurden.

Grundsätzlich muss ich nur wissen, wie oft meine App in den letzten 5 Minuten einen http-Anruf an einen Server gemacht hat, bevor sie den nächsten Anruf tätigt.

Wenn jemand eine existierende Bibliothek kennt, die diese Implementierung haben könnte, bitte teilen.

    
user759326 11.07.2011, 00:32
quelle

2 Antworten

6

Sie können eine Prioritätswarteschlange mit Zeitstempeln als Schlüssel verwenden. Wenn Sie also Peek () aufrufen, wird immer der älteste Zeitstempel in der Warteschlange angezeigt. Jedes Mal, wenn Sie die Anzahl der Elemente innerhalb Ihrer Fenstergröße abfragen, bereinigen Sie die Elemente außerhalb Ihres Fensters und geben die Anzahl der Elemente zurück, die sich noch in der Warteschlange "Priorität" befinden.

Zum Beispiel:

%Vor%     
eSniff 12.07.2011 23:33
quelle
4

In welcher Sprache? Ist die Warteschlange persistent oder im Speicher?

Wenn Sie dieses Verhalten in Java benötigen, können Sie eine DelayedQueue verwenden und haben einen separaten Thread, der queue.take() fortlaufend in einer engen Schleife aufruft, um abgelaufene Elemente auszulöschen. queue.size() gibt Ihnen dann die Größe der verbleibenden nicht abgelaufenen Elemente in der Warteschlange. Dies setzt voraus, dass die Elemente, die Sie in die DelayedQueue eingefügt haben, die Verzögerte interface und gebe den Wert 5 Minuten an die Methode .getDelay() zurück.

    
Moe Matar 11.07.2011 01:02
quelle

Tags und Links