redis - 使用 Redis 排序集成员管理 TTL

标签 redis

我正在设置自动完成功能,并正在研究使用 Redis 排序集。有很多关于此的文档,但要点是添加前缀,例如 abcZADD 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/

相关文章:

scalability - 如何分片现有的键值存储?

node.js - Redis Node - 从哈希中获取 - 不插入数组

php - 奇怪的 node.js 和 redis 行为

node.js - redis高并发插入

php - 当 REDIS 想要过期时如何处理

redis - 相交 zset 和 set 在 Redis 中不起作用

python - 使用 Python 将保存的 `graphdata` 加载回 redisgraph 实例时出现问题

node.js - 在 Node 中使用redis获取哈希键的所有字段和值

ASP.net 应用程序连接 REDIS SocketFailure on Ping

asp.net-web-api - ASP.Net Web API - 扩展大量写操作