redis - zrange 中的字典顺序选项?

标签 redis node-redis phpredis

当我使用 zincrby 为键添加分数时,它会增加分数并将元素按字典顺序排列。

我能否按元素更新或添加的顺序获取此列表?

例如>

如果我执行

zincrby A 100 g
zincrby A 100 a
zincrby A 100 z

然后

zrange A 0 -1

那么结果就是

a->g->z

我想要的结果是这样的,

g->a->z

由于所有人的分数都相同,redis 将元素按字典顺序排列。有什么办法可以预防吗?

最佳答案

我不认为这是可能的,但如果你想保持分数的插入顺序,你应该像这样操作:

<score><timestamp>

代替

<score>

你必须定义一个好的时间记录(毫秒应该没问题)。然后你可以使用

zincrby A 100 * (10^nbdigitsformillis)

例如:

分数 = 100,时间戳为 1381377600 秒

给出:1001381377600

你将分数增加 200:1001381377600 + 200 * 10 = 3001381377600

小心使用 zset,因为它存储 double 值的分数(64 位,但只有 52 位可用于 int 值)所以不要存储超过 15-17 位数字。

如果您做不到(需要高时间戳精度和高分数精度),您将不得不管理两个 zset(一个用于实际分数,一个用于时间戳)并使用这两个值管理您的排名手册。

关于redis - zrange 中的字典顺序选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20000790/

相关文章:

node.js - 有没有一种有意义的方法可以使用游标并行扫描 Redis?

javascript - Socket.io 重新分发

php - 为什么我应该关闭或保持 Redis 连接打开?

ruby-on-rails - Rails 如何判断 sidekiq worker 是否已完成 perform_async

events - 连接 Redis 事件到 Lua 脚本执行和并发问题

node.js - Redis 服务重启时出现 Redis 错误 "NOSCRIPT No matching script. Please use EVAL"

redis如何在1个查询中组合多个命令

laravel - 在Laravel 7中配置PhpRedis

phpredis:运行脚本调用未定义函数 new Redis() 时出错

heroku - Heroku 上的 graphql-redis-subscriptions 无法始终如一地工作