Hat jemand eine begrenzte Datenstruktur in Redis implementiert? Ich arbeite daran, etwas wie einen News-Feed zu erstellen. Der Feed wird sehr oft manipuliert und gelesen, und es wäre billig und perfekt für meinen Anwendungsfall, ihn in Redis in einem sortierten Set zu halten. Das einzige Problem ist, dass ich nur n Elemente pro Feed brauche, und ich mache mir Sorgen über einen Speicherüberlauf. Daher möchte ich sicherstellen, dass jeder Feed niemals über n Elemente kommt. Es scheint ziemlich trivial, eine verkappte sortierte Sammlung in Redis mit Lua zu machen:Redis Capped Sortiertes Set, Liste oder Warteschlange?
redis-cli EVAL "$(cat update_feed.lua)" 1 feeds:some_feed "thing_to_add", n
Wo update_feed.lua so etwas wie (ohne vorher zu testen) aussieht:
redis.call('ZADD', KEYS[1], os.time(), ARGV[1])
local num = redis.call('ZCARD', KEYS[1])
if num > ARGV[2]:
redis.call('ZREMRANGEBYRANK', KEYS[1], -n, -inf)
Das gar nicht so schlecht ist, und ziemlich billig, aber es scheint so ein einfaches Ding zu sein, das viel billiger machbar sein könnte, indem man das sortierte Set mit nur n Eimern anfängt. Ich kann keinen Weg finden, dies in redis zu tun, also denke ich, meine Frage ist: habe ich etwas vermisst, und wenn ich es nicht getan habe, warum gibt es dafür keine Struktur in redis, selbst wenn es nur den grundlegenden Lua lief Skript, das ich beschrieben habe, es scheint, es wäre ein typischer genug Anwendungsfall, dass es als eine Option für Redis-Datenstrukturen implementiert werden sollte?
10 Das Hinzufügen des Elements und das Trimmen der Datenstruktur mithilfe von Lua-Skripten oder MULTI/EXEC-Blöcken ist das, was Sie tun sollen. Es gibt keine spezielle Option, dies automatisch zu tun. –
@DidierSpezia können Sie das als Antwort hinzufügen, damit ich es akzeptieren kann? – Eli
Sie sollten Gkamals Antwort akzeptieren, es sieht gut aus für mich. –