Czy ktoś zaimplementował ograniczoną strukturę danych w Redis? Pracuję nad budowaniem czegoś w rodzaju kanału informacyjnego. Kanał zostanie zmanipulowany i odczytywany z bardzo często, a trzymanie go w posortowanym zestawie w Redis będzie tanie i idealne dla mojego przypadku użycia. Jedynym problemem jest to, że potrzebuję tylko n elementów na kanał i martwię się przepełnieniem pamięci, dlatego chciałbym, aby każdy z nich nigdy nie przekroczył n pozycji. Wydaje się całkiem trywialne dokonać kaucyjna kolekcji posortowane w Redis z Lua:Redis Capped Sorted Set, List lub Queue?
redis-cli EVAL "$(cat update_feed.lua)" 1 feeds:some_feed "thing_to_add", n
Gdzie update_feed.lua wygląda mniej więcej tak (bez testowania IT):
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)
To nie jest źle, i dość tanie, ale wydaje się, że jest to tak podstawowa rzecz, która może być znacznie tańsza dzięki utworzeniu posortowanego zestawu za pomocą tylko n wiaderek. Nie mogę znaleźć sposobu, aby to zrobić na czerwono, więc domyślam się, że moje pytanie brzmi: czy coś przeoczyłem, a jeśli nie, dlaczego nie ma na to struktury redis, nawet jeśli to po prostu działa podstawowa lua opisałem skrypt, wydaje się, że byłby to typowy przypadek użycia, który powinien być zaimplementowany jako opcja dla struktur danych redis?
Dodanie elementu i przycięcie struktury danych za pomocą skryptów Lua lub bloków MULTI/EXEC jest tym co powinieneś zrobić. Nie ma konkretnej opcji, aby zrobić to automatycznie. –
@DidierSpezia możesz dodać to jako odpowiedź, więc mogę to zaakceptować? – Eli
Powinieneś zaakceptować odpowiedź Gkamala, która dla mnie wygląda dobrze. –