Redis数据类型:zset(sorted set )
zset是Redis中最具有特色的数据结构(跳跃列表),首先它有set不可重复的特性,在这个基础上,还可以给value赋予一个排序权重score,所谓的有序其实就是根据这个得分来排序。排序的set,可以去重还可以排序,写进去的时候给一个分数,自动根据根据分数排序,分数可以自定义排序规则。
Redis 有序集合zset和集合set一样也是String类型元素的集合,且不允许重复的成员。不同的是 zset 的每个元素都会关联一个分数(分数可以重复),redis 通过分数来为集合中的成员进行从小到大的排序。Redis的zset天生是用来做排行榜的,榜单,总榜,热榜。
1.1、排行榜
用户发布了n篇文章,其他人看到文章后给喜欢的文章点赞,使用score来记录点赞数,有序集合会根据score排行。流程如下:
用户发布一篇文章a,初始点赞数为0,即score为0
zadd user:article 0 a
有人给文章a点赞,递增1
zincrby user:article 1 a
查询点赞前三篇文章
zrevrangebyscore user:article 0 2
查询点赞后三篇文章
zrangebyscore user:article 0 2
1.2、实时排名
与排行榜类似,但每个元素的分数随时会变化。可以将用户的 ID 和分数存储在 Redis 的 Zset 类型中,然后通过 ZINCRBY 命令更新用户的分数,通过 ZRANK 命令获取用户的排名,从而实现实时排名的功能。
1.3、时间序列
可以将事件的时间戳和内容以键值对的形式存储在 Redis 的 Zset 类型中,然后可以通过 ZADD 命令将事件添加到有序集合中,通过 ZRANGEBYSCORE 命令获取指定时间范围内的事件,从而实现时间序列的功能。