我正在设置自动完成功能,并正在研究使用 Redis 排序集。有很多关于此的文档,但要点是添加前缀,例如 abc
会 ZADD mySet
- 0 a
, 0 ab
, 0 abc
, 0 abc*
.
然后随着查询的使用 ZRANK
然后基于该查询,使用 ZRANGE
以获得匹配结果。
无论如何,我想实现的不是集合的 TTL,而是集合的特定成员。我知道这在 redis 中是不可能开箱即用的,所以我正在考虑实现替代解决方案。一种选择是使用时间戳作为排名,但这在自动完成中不起作用,因为排名很重要,它们需要具有相同的分数才能按字典顺序排序。
我正在考虑的解决方案是有效地将已排序的集合复制到未排序的集合中。这将存储诸如 <prefix>:timestamp
之类的值.然后按计划可以在这里获取成员,检查时间,如果过期则从排序集中删除。显然这会增加内存使用量,但这是合适的。
我的问题是有没有更好的方法来做到这一点?在规模和/或简单性方面。谢谢!
最佳答案
使用另一个 Sorted Set 来跟踪类似 TTL 的时间戳作为分数,定期或在每次调用时查询它,以查找并删除“过期”前缀。
关于redis - 使用 Redis 排序集成员管理 TTL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54495974/