Ich gehe davon aus, dass Sie an einer Warteschlange arbeiten , wo Sie 1000 Elemente an einer einzelnen Stelle einfügen und sie an mehreren Stellen abrufen in der Reihenfolge, in der sie eingefügt wurden .
Sie können es nicht mit einem einzigen Befehl erreichen, aber Sie können es mit 2 Befehlen tun. Sie können ein Lua-Skript schreiben, um sie atomar zu machen.
Lrange:http://redis.io/commands/lrange
Lrange list -100 -1
Dadurch werden die ersten 100 Elemente in der Liste aufgelistet. hier ist der Offset -100. Beachten Sie, dass dadurch die Elemente in der umgekehrten Reihenfolge zurückgegeben werden, in der sie eingefügt wurden. Sie müssen also die Schleife umkehren, um den Warteschlangenmechanismus sicherzustellen.
Ltrim:http://redis.io/commands/ltrim
ltrim list 0 -101
Dadurch werden die ersten 100 Elemente in der Liste getrimmt. hier ist 101 n+1, also muss es 101 sein. Hier ist offset 101
Wenn Sie sie in einen Lua-Block schreiben, stellen Sie die Atomarität sicher.
Lassen Sie mich Ihnen ein einfaches Beispiel geben.
Sie fügen 100 Elemente an einer einzigen Stelle ein.
lpush list 1 2 3 .. 100
Sie haben mehrere Clients, von denen jeder versucht, auf diesen Lua-Block zuzugreifen. Angenommen, Ihr n-Wert ist hier 5. Der erste Kunde kommt rein und bekommt die ersten 5 Elemente eingefügt.
127.0.0.1:6379> lrange list -5 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
Sie behalten sie in Ihrem Lua-Objekt und löschen sie.
127.0.0.1:6379> LTRIM list 0 -6
OK
Geben Sie sie in Ihren Code zurück, jetzt ist das gewünschte Ergebnis 1 2 3 4 5, aber Sie haben 5 4 3 2 1. Sie müssen also die Schleife umkehren und die Operation ausführen.
Wenn der nächste Client hereinkommt, erhält er den nächsten Satz von Werten.
127.0.0.1:6379> lrange list -5 -1
1) "10"
2) "9"
3) "8"
4) "7"
5) "6"
Auf diese Weise können Sie Ihre Anforderung erfüllen. Hoffe das hilft.
BEARBEITEN:
Lua-Skript:
local result = redis.call('lrange', 'list','-5','-1')
redis.call('ltrim','list','0','-6')
return result