redis:Sorted Set数据类型

https://blog.csdn.net/github_26672553/article/details/81869719
前面我们使用Hash数据类型来缓存新闻数据,把新闻内容拆分成各个字段。

以id为101的新闻为例:
新闻ID:101;
新闻标题:xxx;
其他字段:xxxx;
新闻点击量:99

有个需求是:当每次访问到这条新闻的时候,点击量是需要+1的。
使用Hash数据类型,是可以针对某个字段进行修改的。

但是,但是,如果我们要获取 点击量排行榜呢?

Sorted Set

Sorted Set被称为有序集合(它里面自带了一个score),特别适合完成排行榜功能。

zadd news 19 news101
#我们可以理解为向名为news这个集合,加入一个元素叫做news101,其score是19

我们一个系统除了新闻模块,还可能有评论模块、订单模块、用户模块,这些都要有单独的集合名称。

如果我们有5条新闻,要保存去点击量:

zadd news 11 news101 22 news102 33 news103 44 news104 55 news105 

会按照score的值正排序。

查看数据
我们学习List类型的时候,可以用lrang来查看数据
同样

#查看第1条到最后一条
127.0.0.1:6379>zrange news 0 -1
1) "news101"
2) "news102"
3) "news103"
4) "news104"
5) "news105"

#带score查看
127.0.0.1:6379>zrange news 0 -1 withscores
1) "news101"
2) "11"
3) "news102"
4) "22"
5) "news103"
6) "33"
7) "news104"
8) "44"
9) "news105"
10) "55"

查看排名

比如我们要查看新闻id为101的这条新闻排名

127.0.0.1:6379>zrank news news101
(integer) 0 
127.0.0.1:6379>zrank news news105
(integer) 4 

注意:模式是按score值正序排的。

按score值的排倒序:

zrevrank news news101
#正序 取前三名
zrang news 0 2
#倒序 取前三名
zrevrang news 0 2

给指定元素的score加分

#加1分
127.0.0.1:6379>zincrby news 10 news101 #返回加分后的结果值,如果元素不存在则添加
"21"
127.0.0.1:6379>zscore news 10 news101 
"21"

根据分数查看排行榜

#取分数15~22的
zrangebyscore news 15 22
zrevrangebyscore news 22 15

猜你喜欢

转载自blog.csdn.net/github_26672553/article/details/81908780