localhost:6379> zadd test 1 redis
(integer) 1
localhost:6379> zadd test 2 mysql
(integer) 1
localhost:6379> zadd test 3 oracle
(integer) 1
localhost:6379> zadd test 4 mysql
(integer) 0
localhost:6379> zrange test 0 10
1) "redis"
2) "oracle"
3) "mysql"
localhost:6379> zrange test 0 10 withscores
1) "redis"
2) "1"
3) "oracle"
4) "3"
5) "mysql"
6) "4"
用于将一个或多个成员元素及其分数值加入到有序集当中。
如果某个成员已经是有序集的成员,那么更新这个成员的分数值,并通过重新插入这个成员元素,来保证该成员在正确的位置上。
分数值可以是整数值或双精度浮点数。
如果有序集合 key 不存在,则创建一个空的有序集并执行 ZADD 操作。
当 key 存在但不是有序集类型时,返回一个错误。
localhost:6379> zadd test 2 java
(integer) 1
localhost:6379> zrange test 0 -1 withscores
1) "redis"
2) "1"
3) "java"
4) "2"
5) "oracle"
6) "3"
7) "mysql"
8) "4"
用于计算集合中元素的数量。
localhost:6379> zcard test
(integer) 4
用于计算有序集合中指定分数区间的成员数量。
localhost:6379> zcount test 1 3
(integer) 3
localhost:6379> zcount test 2 3
(integer) 2
对有序集合中指定成员的分数加上增量 increment
可以通过传递一个负数值 increment ,让分数减去相应的值,比如 ZINCRBY key -5 member ,就是让 member 的 score 值减去 5 。
当 key 不存在,或分数不是 key 的成员时, ZINCRBY key increment member 等同于 ZADD key increment member 。
当 key 不是有序集类型时,返回一个错误。
分数值可以是整数值或双精度浮点数。
localhost:6379> zrange test 0 -1 withscores
1) "redis"
2) "1"
3) "java"
4) "2"
5) "oracle"
6) "3"
7) "mysql"
8) "4"
localhost:6379> zincrby test 2 oracle
"5"
localhost:6379> zrange test 0 -1 withscores
1) "redis"
2) "1"
3) "java"
4) "2"
5) "mysql"
6) "4"
7) "oracle"
8) "5"
计算给定的一个或多个有序集的交集,其中给定 key 的数量必须以 numkeys 参数指定,并将该交集(结果集)储存到 destination 。
默认情况下,结果集中某个成员的分数值是所有给定集下该成员分数值之和。
localhost:6379> zrange test 0 -1 withscores
1) "redis"
2) "1"
3) "java"
4) "2"
5) "mysql"
6) "4"
7) "oracle"
8) "5"
localhost:6379> zrange test2 0 -1 withscores
1) "java"
2) "1"
3) "mysql"
4) "1"
5) "redis"
6) "1"
localhost:6379> zinterstore teststore 2 test test2
(integer) 3
localhost:6379> zrange teststore 0 -1 withscores
1) "redis"
2) "2"
3) "java"
4) "3"
5) "mysql"
6) "5"
在计算有序集合中指定字典区间内成员数量。
localhost:6379> zrange test 0 -1 withscores
1) "redis"
2) "1"
3) "java"
4) "2"
5) "mysql"
6) "4"
7) "oracle"
8) "5"
localhost:6379> zlexcount test - +
(integer) 4
返回有序集中,指定区间内的成员。
其中成员的位置按分数值递增(从小到大)来排序。
具有相同分数值的成员按字典序(lexicographical order )来排列。
如果你需要成员按
值递减(从大到小)来排列,请使用 ZREVRANGE 命令。
下标参数 start 和 stop 都以 0 为底,也就是说,以 0 表示有序集第一个成员,以 1 表示有序集第二个成员,以此类推。
你也可以使用负数下标,以 -1 表示最后一个成员, -2 表示倒数第二个成员,以此类推。
localhost:6379> zrange test 0 -1 withscores
1) "redis"
2) "1"
3) "java"
4) "2"
5) "mysql"
6) "4"
7) "oracle"
8) "5"
通过字典区间返回有序集合的成员。
localhost:6379> zrange myzset 0 -1 withscores
1) "a"
2) "0"
3) "b"
4) "0"
5) "c"
6) "0"
7) "d"
8) "0"
9) "e"
10) "0"
11) "f"
12) "0"
13) "g"
14) "0"
localhost:6379> zrangebylex myzset 0 -1 - [c
(error) ERR min or max not valid string range item
localhost:6379> zrangebylex myzset - [c
1) "a"
2) "b"
3) "c"
localhost:6379> zrangebylex myzset - (c
1) "a"
2) "b"
localhost:6379> zrangebylex myzset [c (g
1) "c"
2) "d"
3) "e"
4) "f"
localhost:6379> zadd myzset 1 h
(integer) 1
localhost:6379> zrangebylex myzset [e [h
1) "e"
2) "f"
3) "g"
4) "h"
localhost:6379>
返回有序集合中指定分数区间的成员列表。有序集成员按分数值递增(从小到大)次序排列。
具有相同分数值的成员按字典序来排列(该属性是有序集提供的,不需要额外的计算)。
默认情况下,区间的取值使用闭区间 (小于等于或大于等于),你也可以通过给参数前增加 ( 符号来使用可选的开区间 (小于或大于)。
localhost:6379> zrange test 0 -1 withscores
1) "redis"
2) "1"
3) "java"
4) "2"
5) "mysql"
6) "4"
7) "oracle"
8) "5"
localhost:6379> zrangebyscore test (2 5
1) "mysql"
2) "oracle"
localhost:6379> zrangebyscore test (2 (5
1) "mysql"
返回有序集中指定成员的排名。其中有序集成员按分数值递增(从小到大)顺序排列。
localhost:6379> zrange test 0 -1 withscores
1) "redis"
2) "1"
3) "java"
4) "2"
5) "mysql"
6) "4"
7) "oracle"
8) "5"
localhost:6379> zrank test java
(integer) 1
localhost:6379> zrank test oracle
(integer) 3
用于移除有序集中的一个或多个成员,不存在的成员将被忽略。
当 key 存在但不是有序集类型时,返回一个错误。
localhost:6379> zrange myzset 0 -1 withscores
1) "a"
2) "0"
3) "b"
4) "0"
5) "c"
6) "0"
7) "d"
8) "0"
9) "e"
10) "0"
11) "f"
12) "0"
13) "g"
14) "0"
15) "h"
16) "1"
localhost:6379> zrem myzset a e
(integer) 2
localhost:6379> zrange myzset 0 -1 withscores
1) "b"
2) "0"
3) "c"
4) "0"
5) "d"
6) "0"
7) "f"
8) "0"
9) "g"
10) "0"
11) "h"
12) "1"
用于移除有序集合中给定的字典区间的所有成员。
localhost:6379> zrange myzset 0 -1
1) "b"
2) "c"
3) "d"
4) "f"
5) "g"
6) "h"
localhost:6379> zremrangebylex myzset [b [f
(integer) 4
localhost:6379> zrange myzset 0 -1
1) "g"
2) "h"
用于移除有序集中,指定排名(rank)区间内的所有成员。
localhost:6379> zrange myzset 0 -1
1) "a"
2) "b"
3) "c"
4) "g"
5) "h"
localhost:6379> zrank myzset b
(integer) 1
localhost:6379> zrank myzset g
(integer) 3
localhost:6379> zremrangebyrank myzset 1 3
(integer) 3
localhost:6379> zrange myzset 0 -1
1) "a"
2) "h"
用于移除有序集中,指定分数(score)区间内的所有成员。
localhost:6379> zrange myzset 0 -1
1) "a"
2) "h"
localhost:6379> zremrangebyscore myzset 0 0
(integer) 1
localhost:6379> zrange myzset 0 -1
1) "h"
返回有序集中,指定区间内的成员。
其中成员的位置按分数值递减(从大到小)来排列。
具有相同分数值的成员按字典序的逆序(reverse lexicographical order)排列。
除了成员按分数值递减的次序排列这一点外, ZREVRANGE 命令的其他方面和 ZRANGE 命令一样。
localhost:6379> zrange test 0 -1 withscores
1) "redis"
2) "1"
3) "java"
4) "2"
5) "mysql"
6) "4"
7) "oracle"
8) "5"
localhost:6379> zrevrange test 0 -1 withscores
1) "oracle"
2) "5"
3) "mysql"
4) "4"
5) "java"
6) "2"
7) "redis"
8) "1"
返回有序集中指定分数区间内的所有的成员。有序集成员按分数值递减(从大到小)的次序排列。
具有相同分数值的成员按字典序的逆序(reverse lexicographical order )排列。
localhost:6379> zrevrangebyscore test 4 2 withscores
1) "mysql"
2) "4"
3) "java"
4) "2"
返回有序集中成员的排名。其中有序集成员按分数值递减(从大到小)排序。
排名以 0 为底,也就是说, 分数值最大的成员排名为 0 。
使用 ZRANK 命令可以获得成员按分数值递增(从小到大)排列的排名。
localhost:6379> zrevrange test 0 -1 withscores
1) "oracle"
2) "5"
3) "mysql"
4) "4"
5) "java"
6) "2"
7) "redis"
8) "1"
localhost:6379> zrevrank test mysql
(integer) 1
返回有序集中,成员的分数值。 如果成员元素不是有序集 key 的成员,或 key 不存在,返回 nil 。
localhost:6379> zrange test 0 -1 withscores
1) "redis"
2) "1"
3) "java"
4) "2"
5) "mysql"
6) "4"
7) "oracle"
8) "5"
localhost:6379> zscore test mysql
"4"
计算给定的一个或多个有序集的并集,其中给定 key 的数量必须以 numkeys 参数指定,并将该并集(结果集)储存到 destination 。
默认情况下,结果集中某个成员的分数值是所有给定集下该成员分数值之和 。
localhost:6379> zrange programmer 0 -1 WITHSCORES
1) "peter"
2) "2000"
3) "jack"
4) "3500"
5) "tom"
6) "5000"
localhost:6379> zrange manager 0 -1 WITHSCORES
1) "peter"
2) "1500"
3) "herry"
4) "2000"
5) "mary"
6) "3500"
7) "bob"
8) "4000"
localhost:6379> zunionstore salary 2 programmer manager weights 0 2
(integer) 6
localhost:6379> ZRANGE salary 0 -1 WITHSCORES
1) "jack"
2) "0"
3) "tom"
4) "0"
5) "peter"
6) "3000"
7) "herry"
8) "4000"
9) "mary"
10) "7000"
11) "bob"
12) "8000"
redis.clients
jedis
2.9.0
org.slf4j
slf4j-log4j12
1.7.25
org.springframework.data
spring-data-redis
1.8.4.RELEASE
package redis.zset;
import java.util.HashSet;
import java.util.Set;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.data.redis.core.DefaultTypedTuple;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ZSetOperations;
import org.springframework.data.redis.core.ZSetOperations.TypedTuple;
public class RedisZsetTest {
private static final Logger logger = LoggerFactory.getLogger(RedisZsetTest.class);
public static void main(String[] args) {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("redis-conf/zset/zset-redis.xml");
RedisTemplate redisTemplate = applicationContext.getBean(RedisTemplate.class);
ZSetOperations opsForZSet = redisTemplate.opsForZSet();
Set> set1 = new HashSet<>();
Set> set2 = new HashSet<>();
int j = 9;
for (int i = 1; i < 10; i++) {
j--;
Double score1 = Double.valueOf(i);
String value1 = "x" + i;
Double score2 = Double.valueOf(j);
String value2 = j % 2 == 1 ? "y" + j : "x" + j;
TypedTuple typedTuple1 = new DefaultTypedTuple(value1, score1);
TypedTuple typedTuple2 = new DefaultTypedTuple(value2, score2);
set1.add(typedTuple1);
set2.add(typedTuple2);
}
// 1.添加
opsForZSet.add("zset1", set1);
opsForZSet.add("zset2", set2);
// 2.读取元素,但是不返回分数
Set zset1 = opsForZSet.range("zset1", 0, -1);
Set zset2 = opsForZSet.range("zset2", 0, -1);
logger.debug("zset1所有值值:{}", zset1);
logger.debug("zset1所有值值:{}", zset2);
// 3.求元素个数
Long zCard = opsForZSet.zCard("zset1");
logger.debug("zset1的元素个数:{}", zCard);
// 4.求分数在3-6之间的元素个数
Long count = opsForZSet.count("zset1", 6, 9);
logger.debug("zset1数在3-6之间的元素个数:{}", count);
// 5.读取元素,并返回分数
Set> rangeWithScores1 = opsForZSet.rangeWithScores("zset1", 0, -1);
Set> rangeWithScores2 = opsForZSet.rangeWithScores("zset2", 0, -1);
logger.debug("zset1所有值值:{}", rangeWithScores1);
for (TypedTuple object : rangeWithScores1) {
Double score = object.getScore();
String value = object.getValue();
logger.debug("值:{}, 分数:{}", value, score);
}
logger.debug("zset1所有值值:{}", rangeWithScores2);
for (TypedTuple object : rangeWithScores2) {
Double score = object.getScore();
String value = object.getValue();
logger.debug("值:{}, 分数:{}", value, score);
}
// 6.交集,分数相加
opsForZSet.intersectAndStore("zset1", "zset2", "inter_zset");
Set> inter_zset = opsForZSet.rangeWithScores("inter_zset", 0, -1);
logger.debug("zset1所有值值:{}", inter_zset);
for (TypedTuple object : inter_zset) {
Double score = object.getScore();
String value = object.getValue();
logger.debug("值:{}, 分数:{}", value, score);
}
}
}
redis-desktop-manager-0.9.99.zip工具下载:
链接:https://pan.baidu.com/s/1BB-MvTfx6T1SDD_eq5tq5w
提取码:snby