Redis で何らかの種類のキャップ付きデータ構造を実装した人はいますか? 私はニュースフィードのようなものの構築に取り組んでいます。フィードは非常に頻繁に操作されて読み取られることになり、Redis の並べ替えられたセットに保持することは安価であり、私のユース ケースに最適です。唯一の問題は、フィードごとに n 個のアイテムしか必要としないことです。メモリ オーバーフローが心配なので、各フィードが n 個のアイテムを超えないようにしたいと考えています。Lua を使用して、Redis でキャップ付きのソート済みコレクションを作成するのは非常に簡単に思えます。
redis-cli EVAL "$(cat update_feed.lua)" 1 feeds:some_feed "thing_to_add", n
update_feed.lua は次のようになります (テストなし):
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)
これはまったく悪くなく、かなり安価ですが、ソートされたセットを最初に n バケットのみでインスタンス化することで、はるかに安価に実行できる基本的なことのように思えます。私はそれをredisで行う方法を見つけることができないので、私の質問は次のとおりだと思います。私が説明したスクリプトは、redis データ構造のオプションとして実装する必要がある典型的なユースケースのように思えますか?