Featured image of post redis之zset

redis之zset

redis的数据类型zset的概述、应用以及数据结构介绍

本文阅读量

redis之zset

概述

redis有序集合,保留了集合中元素不能重复的特性,不同的是,有序集合给每个元素多设置了一个分数,利用该分数作为排序的依据(在set的基础上,增加了一个值,set k1 v1 zset k1 score1 v1)。

使用语法

基础

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
127.0.0.1:6379> zadd myset 1 one
(integer) 1
127.0.0.1:6379> zadd myset 2 two 3 three
(integer) 2
127.0.0.1:6379> zrange myset 0 -1
1) "one"
2) "two"
3) "three"
127.0.0.1:6379> zscore myset one # 获取成员分数
"1"
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
127.0.0.1:6379> zadd salary 2500 xiaohong  #添加三条数据
(integer) 1
127.0.0.1:6379> zadd salary 5000 zhangsan
(integer) 1
127.0.0.1:6379> zadd salary 5500  snailsir 
(integer) 1
127.0.0.1:6379> zrangebyscore salary -inf +inf #显示所有用户 从小到大!
1) "xiaohong"
2) "zhangsan"
3) "snailsir"
127.0.0.1:6379> zrevrange salary 0 -1  #显示所有用户 从大到小!
1) "snailsir"
2) "zhangsan"
3) "xiaohong"
127.0.0.1:6379> zrangebyscore salary -inf +inf withscores #显示所有的用户并且附带成绩
1) "xiaohong"
2) "2500"
3) "zhangsan"
4) "5000"
5) "snailsir"
6) "5500"
127.0.0.1:6379> zrangebyscore salary -inf 2500 withscores #显示工资小于2500员工升序排列
1) "xiaohong"
2) "2500"

移除指定元素

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
127.0.0.1:6379> zrange salary 0 -1
1) "xiaohong"
2) "zhangsan"
3) "snailsir"
127.0.0.1:6379> zrem salary xiaohong
(integer) 1
127.0.0.1:6379> zrange salary 0 -1
1) "zhangsan"
2) "snailsir"
127.0.0.1:6379> zremrangebyrank score 0 0 # 移除有序集中,指定排名(rank)区间内的所有成员
(integer) 1
127.0.0.1:6379> zrange score 0 -1
1) "harry"

获取有序集合中的个数

1
2
127.0.0.1:6379> zcard salary
(integer) 2

获取指定区间成员数量

1
2
3
4
5
6
7
8
127.0.0.1:6379> zadd myset 1 hello
(integer) 1
127.0.0.1:6379> zadd myset 2 word 3 snaislir
(integer) 2
127.0.0.1:6379> zcount myset 1 3
(integer) 3
127.0.0.1:6379> zcount myset 1 2
(integer) 2

返回有序集中指定成员的排名

1
2
3
4
5
6
7
127.0.0.1:6379> zrank score harry
(integer) 2
127.0.0.1:6379> zrank score starsky
(integer) 1
127.0.0.1:6379> zrank score will
(integer) 0
127.0.0.1:6379>

迭代有序集合

1
2
3
4
127.0.0.1:6379> zscan score 0 match t*
1) "0"
2) 1) "tony"
2) "95"

应用场景

排行榜

list与zset类型做排行榜区别:实时更新与定时更新的区别

list适合非动态的榜单

抢票加速包

用户买了加速包,就给分数加分,分值越高抢到票的几率越大

数据结构

跳跃表

zset是基于跳跃表实现的

基于链表优化,实现的跳跃表

如果我们找22,只需要经过7->19->22就可以查找到了

使用 Hugo 构建
主题 StackJimmy 设计