Redis中基于分数和日期时间的排名解决方案?
2017-5-16 18:26:22
收藏:0
阅读:82
评论:1
我想使用Redis的有序集合作为一个排行榜。但是使用ZREVRANGE 0 x,我只能从分数的顶部(升序排列的分数的末尾)获取前x个元素,使用的默认排序方法是在Redis官方文档中提到的字典顺序:
对于得分相等的元素,使用字典顺序。
我需要的解决方案是分数条目的日期时间。例如:
提交(按顺序)redis将其排序需求
用户1 -- 分数50 用户1
用户3 -- 分数40 用户3
用户2 -- 分数40 用户2
我唯一看到的解决方案是存储条目上次更新的日期时间,但仍然使用ZREVRANGE key 0 x来从前x个用户中获取最大和最小分数。然后做一个ZREVRANGEBYSCORE key max min。如果结果长度大于x,则至少有一个并列,因此我会使用2个键在Lua中对较小的列表进行排序。
这种方法似乎非常慢,我需要使其适用于数十万用户。我不喜欢两次调用和使用Lua进行处理(在Redis端进行原子操作),并想知道是否有更好的方法可以使用2个键的有序集或者配置另一个解决方案?
我的代码已经编写完成,因此我无法更改数据库类型。如果您有任何有趣的想法,我很乐意听取,因为我不是Redis的专家。
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

排序集合分数是浮点数值。你的分数和得分的日期时间都可以适合其中。
现在我们称Redis分数为RScore。 你可以把一个人的分数放在数字的左侧10位,时间戳放在最右侧的x位。中间的位可以是零。
所以,每当您对RScore进行排序时,它将首先按分数排序,如果存在平局,则按右侧位中的Unix时间戳进行排序。 要从RScore中查找得分和得分的时间戳,您只需要解析一组右侧位。 在Python中执行此操作的示例实用程序在此处。