Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员,不同的是每个元素都会关联一个double(双精度浮点型)类型的分数,redis正是通过该分数来为集合中的成员进行从小到大的排序,有序集合的成员是唯一的,但分数(score)却可以重复,集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1), 集合中最大的成员数为 2^32 - 1 (4294967295, 每个集合可存储40多亿个成员)。
生成有序集合
127.0.0.1:6379> ZADD zset1 1 v1
(integer) 1
127.0.0.1:6379> ZADD zset1 2 v2
(integer) 1
127.0.0.1:6379> ZADD zset1 2 v3
(integer) 1
127.0.0.1:6379> ZADD zset1 3 v4
(integer) 1
127.0.0.1:6379> TYPE zset1
zset
127.0.0.1:6379> TYPE zset2
zset
一次生成多个数据:
192.168.7.101:6379> ZADD zset2 1 v1 2 v2 3 v3 4 v4 5 v5
(integer) 5
集合排行案例
192.168.7.104:6379> ZADD paihangbang 90 nezha 199 zhanlang 60 zhuluoji 30 gangtiexia
(integer) 4
192.168.7.101:6379>
1) "gangtiexia"
2) "zhuluoji"
3) "nezha"
4) "zhanlang"
ZRANGE paihangbang
0 -1 #显示集合内所有的key
192.168.7.104:6379> ZREVRANGE paihangbang 0 -1 withscores #显示指定集合内所有key和得分情况
1) "zhuluoji"
2) "60"
3) "nezha"
4) "90"
5) "zhanlang"
6) "199"
获取集合的长度数
127.0.0.1:6379> ZCARD zset1
(integer) 4
127.0.0.1:6379> ZCARD zset2
(integer) 4
基于索引返回数值
127.0.0.1:6379> ZRANGE zset1 1 3
1) "v2" 2) "v3" 3) "v4"
127.0.0.1:6379> ZRANGE zset1 0 2
1) "v1" 2) "v2" 3) "v3"
127.0.0.1:6379> ZRANGE zset1 2 2
1) "v3"
返回某个数值的索引
127.0.0.1:6379> ZRANK zset1 v2
(integer) 1
127.0.0.1:6379> ZRANK zset1 v3
(integer) 2