行走的骆驼的博客

行走在代码的边缘,拥抱代码

redis有序集合排行榜问题

Redis提供了按score进行排序的有序集合zset,例如我们所有的排行榜内容,都可以实现其目的,但是如果相同分数redis是怎么排序的呢。
1-默认redis的zset是按score排序的,提供了range(start, end),rangeByScore(min,max),rangeWithScores(start, end))等各式各样的排序方式。
2-在score相同的情况下,zset是按字典排序的(0~9,A~Z,a~z)。

所以当我们要在需求中要相同score按时间的实时排序。
只能在score做文章,因为要保证key和field唯一性。
(两种方式不合适:1.需求中score原本存的就是浮点类型,《可以用位运算?》2.有多种排序条件不适用)

选择方案:因为score存入的时候是double类型,所以选择将时间戳放在小数点后,
eg:初始化值
这里写图片描述

这样就能保证score每次都不一样,而且redis会根据double的值来根据排序。如果更新的话,将小数点后的时间戳清除掉,重新将当前的时间戳赋值到小数点之后
这里写图片描述

以上设计仅供参考,只是在项目中遇到的一些小的细节问题,特此记录不足之处,多多交流。

阅读更多
文章标签: redis
个人分类: java
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭