Redis有序集合
2020-04-22 本文已影响0人
lc_666
- 对于有序集合
ZSet
来说,每个存储元素相当于有两个值组成的,一个是有序结合的元素值,一个是排序值; - 排序值可以重复;
redis-cli操作ZSet
- 添加一个或者多个元素/查询元素
127.0.0.1:6379> zadd skills 1 redis 2 java
3 mysql
(integer) 3
127.0.0.1:6379> zrange skills 0 -1
1) "redis"
2) "java"
3) "mysql"
- 删除一个或多个元素(根据元素值)
127.0.0.1:6379> zrem skills redis
(integer) 1
127.0.0.1:6379> zrange skills 0 -1
1) "java"
2) "mysql"
- 查询某元素的 score 值
127.0.0.1:6379> zscore skills java
"2"
- 查询 score 区间内元素
127.0.0.1:6379> zrangebyscore skills 0 5
1) "java"
2) "mysql"
- 查询某元素排名
127.0.0.1:6379> zrank skills mysql
(integer) 1
127.0.0.1:6379> zrank skills java
(integer) 0
使用Jedis操作
public class RedisZSet {
public static void main(String[] args) {
Jedis redis = ConnectRedis.getRedis();
Set<String> skills = redis.zrange("skills", 0, -1);
System.out.println(skills);
Long zrank = redis.zrank("skills", "java");
System.out.println(zrank);
redis.zadd("skills",10,"oracle");
skills=redis.zrange("skills",0,-1);
System.out.println(skills);
}
}
使用场景
- 学生成绩排名
- 粉丝列表,根据关注的先后时间排序
更多操作
- 查询有序集合的总个数
127.0.0.1:6379> zcard skills
(integer) 3
- 查询 score 区间内的元素个数
127.0.0.1:6379> zrange skills 0 -1
1) "java"
2) "mysql"
3) "oracle"
127.0.0.1:6379> zcount skills 0 5
(integer) 2
- 累加元素的 score 值
127.0.0.1:6379> zincrby skills 10 mysql
"13"
127.0.0.1:6379> zscore skills mysql
"13"
- 查询某元素倒序排名
127.0.0.1:6379> zrange skills 0 -1
1) "java"
2) "oracle"
3) "mysql"
127.0.0.1:6379> zrevrank skills oracle
(integer) 1
127.0.0.1:6379> zrevrank skills mysql
(integer) 0
- 删除 score 区间内的元素
127.0.0.1:6379> zrange skills 0 -1
1) "java"
2) "oracle"
3) "mysql"
4) "spring"
127.0.0.1:6379> zscore skills mysql
"13"
127.0.0.1:6379> zremrangebyscore skills 11 13
(integer) 1
127.0.0.1:6379> zrange skills 0 -1
1) "java"
2) "oracle"
3) "spring"
127.0.0.1:6379>
- 复制交集元素到新集合
127.0.0.1:6379> zadd skills1 1 redis 2 mysql 3 java 4 oracle
(integer) 4
127.0.0.1:6379> zadd skills2 1 oracle 2 python
(integer) 2
127.0.0.1:6379> zinterstore skills3 2 skills1 skills2
(integer) 1
127.0.0.1:6379> zrange skills3 0 -1
1) "oracle"
127.0.0.1:6379> zscore skills oracle
"10"
- 复制并集元素到新集合
127.0.0.1:6379> zunionstore skills4 2 skills1 skills2
(integer) 5
127.0.0.1:6379> zrange skills4 0 -1
1) "redis"
2) "mysql"
3) "python"
4) "java"
5) "oracle"