有没有人在 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 中没有这个结构,即使它只是运行基本的 Lua我描述的脚本,它似乎是一个足够典型的用例,应该作为 redis 数据结构的一个选项来实现?