redis基本类型和使用方法详解

2020-02-07 18:01:47王振洲

ZUNIONSTORE destination numkeys key [key ... ] [WEIGHTS weight [weight ... ]] [AGGREGATE SUM|MIN|MAX] 与上面类似。

127.0.0.1:6379> zadd zset1 10 sh 40 bj ##添加2个元素
(integer) 2
127.0.0.1:6379> zadd zset1 20 sh 50 hz 80 cd ##更新1个,添加2个
(integer) 2
127.0.0.1:6379> zscore zset1 sh ##获取sh的分数,已更新为20
"20"
127.0.0.1:6379> zrange zset1 1 -1 ##从第二个元素开始的所有元素
1) "bj"
2) "hz"
3) "cd"
127.0.0.1:6379> zrange zset1 0 -1 withscores ##获取全部元素
1) "sh"
2) "20"
3) "bj"
4) "40"
5) "hz"
6) "50"
7) "cd"
8) "80"
127.0.0.1:6379> zadd zset1 inf zy ##添加正无穷
(integer) 1
127.0.0.1:6379> zrangebyscore zset1 (50 inf withscores ## 分数大于50的元素
1) "cd"
2) "80"
3) "zy"
4) "inf"
127.0.0.1:6379> zrangebyscore zset1 50 inf withscores limit 1 2 
## 分数大于等于50的元素,从第二个开始,取2个
1) "cd"
2) "80"
3) "zy"
4) "inf"
127.0.0.1:6379> zincrby zset1 5 hz ## 给元素hz加5分
"55" 
127.0.0.1:6379> zrangebyscore zset1 (50 inf ## 添加成功
1) "hz"
2) "cd"
3) "zy"
127.0.0.1:6379> zrange zset1 0 -1 WITHSCORES ##查询所有元素
 1) "sh"
 2) "20"
 3) "bj"
 4) "40"
 5) "hz"
 6) "55"
 7) "cd"
 8) "80"
 9) "zy"
10) "inf"
127.0.0.1:6379> zcount zset1 0 inf ##获取元素个数
(integer) 5
127.0.0.1:6379> zcount zset1 (55 inf ##大于55元素个数
(integer) 2
127.0.0.1:6379> zrem zset1 zy ##删除zy
(integer) 1
127.0.0.1:6379> zrange zset1 0 -1 ## 剩下四个
1) "sh"
2) "bj"
3) "hz"
4) "cd"
127.0.0.1:6379> zremrangebyrank zset1 1 2 ## 按照排名,删除第2名到第3名
(integer) 2
127.0.0.1:6379> zrange zset1 0 -1 ## 只剩下2个
1) "sh"
2) "cd"
127.0.0.1:6379> zadd zs1 1 a 2 b 
(integer) 2
127.0.0.1:6379> zadd zs2 10 a 20 b
(integer) 2
## zs1和zs2取交集,zs1的权重为1,zs2的权重为0.5,所以a的结果分数是1+10*0.5=6
127.0.0.1:6379> zinterstore zs3 2 zs1 zs2 WEIGHTS 1 0.5 AGGREGATE sum
(integer) 2
127.0.0.1:6379> zrange zs3 0 -1 withscores
1) "a"
2) "6"
3) "b"
4) "12"

用途

排序的场景。如按照博客访问量排序文章列表。key是用户id,set中的数据是文章id,每个文章id关联一个score(访问量)。

与列表的比较

都可以获取某一范围的元素 列表类型通过链表实现,获取两端数据速度快,元素增多后,访问中间数据速度较慢。所以适合“新鲜事”和“日志”一类的场景。 有序集合是通过散列表和跳跃表实现的,所以读取位于中间部分的数据的速度也很快。时间复杂度O(log(N))。 列表不能简单的调整某个元素的位置,有序集合可以。(修改元素的分数)

更多关于redis基本类型和使用方法请点击下面的相关链接