2016-05-10 4 views
0

mir eine sortierte Menge, die in Echtzeit und es enthält einige IDs, die ich in einer Zeit, in umgekehrter Reihenfolge des Ranges abrufen 5 wollen wachsen. Dies ist im Grunde um Seitenumbruch zu implementieren. Diese IDs sind Schlüssel für eine Hashmap. Gibt es eine Möglichkeit, 5 Elemente gleichzeitig mit redis ZSet-Operationen effizient zu erhalten?Redis - immer 5 Elemente zu einem Zeitpunkt von einem sortierten gesetzt

Zum Beispiel, in der Sorted Set unten, sagen wir, ich möchte 5 Elemente vor "572c7d87e53156245a3fd167" bekommen, wie könnte ich tun, dass neue IDs nach meinem letzten Element in der Laufzeit hinzugefügt werden konnte? Das erwartete Ergebnis sollte mir die IDs 572c7c58e53156245a3fd166, 572c7ad2e53156245a3fd165, 572c746e1eeba6b059b08f1b, 572c74531eeba6b059b08f1a und 572c6fc9612ad65757cca4f9 geben.

1) "572b58c0dd319a1a4703eba8" 
2) "1462429760.8629999" 
3) "572c697e612ad65757cca4f7" 
4) "1462499582.6889999" 
5) "572c6a8e612ad65757cca4f8" 
6) "1462499854.056" 
7) "572c6fc9612ad65757cca4f9" 
8) "1462501193.927" 
9) "572c74531eeba6b059b08f1a" 
10) "1462502355.5250001" 
11) "572c746e1eeba6b059b08f1b" 
12) "1462502382.313" 
13) "572c7ad2e53156245a3fd165" 
14) "1462504018.325" 
15) "572c7c58e53156245a3fd166" 
16) "1462504408.1370001" 
17) "572c7d87e53156245a3fd167" 
18) "1462504711.4200001" 
19) "572c7da3e53156245a3fd168" 
20) "1462504739.352" 
+0

Haben Sie sich zrevrange angesehen? –

+0

danke @ItamarHaber. Ja, ich habe es angeschaut. Die Hauptherausforderung in meinem Fall ist wegen der Werte der Punkte. Daher, wenn ich die letzten N Werte haben möchte, ist es schwierig eine untere Grenze für den Score zu setzen, um einen Bereich zu liefern. – sudhama

Antwort

0

Eine Option ist bei ZRANGEBYLEX oder ZRANGEBYSCORE und verwenden Sie die Offset/Zählung zu suchen.

Was ich jedoch für die Paginierung normalerweise mache, ist das Erstellen einer neuen Liste (eine Art Momentaufnahme der ursprünglichen Liste), die sich nicht dynamisch ändert, und das Laden von Daten von dort. So fühlt es sich nicht an, ein bewegliches Ziel zu verfolgen. Ich habe nur ein TTL gesetzt und es vergessen.

+0

danke. das ist ein interessanter Weg, dies zu tun. Hat das für Sie auch in großem Maßstab gut funktioniert? Scheint, als ob es zu viele Benutzer gibt, dann würde man viele solche Listen herum haben. – sudhama

+0

Mein TTL ist 20 Minuten und ich beschränke die Liste auf 1000 Schlüssel. Jeder Schlüssel ist ungefähr 32 Bytes. Also habe ich ungefähr 32KB pro Benutzer. Das bedeutet, dass ich mit 320MB 10000 "gleichzeitige" Benutzer unterstützen kann. Es ist mehr als genug für meine Website. –

+0

cool. hört sich gut an. Danke für die Details. – sudhama

Verwandte Themen