zset 怎么get_如何使用RedisTemplate访问Redis数据结构之Zset

Redis的ZSet数据结构

Redis 有序集合和无序集合一样也是string类型元素的集合,且不允许重复的成员。

不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

有序集合的成员是唯一的,但分数(score)却可以重复。

public interface ZSetOperations

ZSetOperations提供了一系列方法对有序集合进行操作:

Boolean add(K key, V value, double score);

新增一个有序集合,存在的话为false,不存在的话为true

使用:System.out.println(template.opsForZSet().add("zset1","zset-1",1.0));

结果:true

Long add(K key, Set> tuples);

新增一个有序集合

使用:ZSetOperations.TypedTuple objectTypedTuple1 = new DefaultTypedTuple("zset-5",9.6);

ZSetOperations.TypedTuple objectTypedTuple2 = new DefaultTypedTuple("zset-6",9.9);

Set> tuples = new HashSet>();

tuples.add(objectTypedTuple1);

tuples.add(objectTypedTuple2);

System.out.println(template.opsForZSet().add("zset1",tuples));

System.out.println(template.opsForZSet().range("zset1",0,-1));

结果:[zset-1, zset-2, zset-3, zset-4, zset-5, zset-6]

Long remove(K key, Object... values);

从有序集合中移除一个或者多个元素

使用:System.out.println(template.opsForZSet().range("zset1",0,-1));

System.out.println(template.opsForZSet().remove("zset1","zset-6"));

System.out.println(template.opsForZSet().range("zset1",0,-1));

结果:[zset-1, zset-2, zset-3, zset-4, zset-5, zset-6]1[zset-1, zset-2, zset-3, zset-4, zset-5]

Double incrementScore(K key, V value, double delta);

增加元素的score值,并返回增加后的值

使用:System.out.println(template.opsForZSet().incrementScore("zset1","zset-1",1.1)); //原为1.1

结果:2.2

Long rank(K key, Object o);

返回有序集中指定成员的排名,其中有序集成员按分数值递增(从小到大)顺序排列

使用:System.out.println(template.opsForZSet().range("zset1",0,-1));

System.out.println(template.opsForZSet().rank("zset1","zset-2"));

结果:[zset-2, zset-1, zset-3, zset-4, zset-5]0 //表明排名第一

Long reverseRank(K key, Object o);

返回有序集中指定成员的排名,其中有序集成员按分数值递减(从大到小)顺序排列

使用:System.out.println(template.opsForZSet().range("zset1",0,-1));

System.out.println(template.opsForZSet().reverseRank("zset1","zset-2"));

结果:[zset-2, zset-1, zset-3, zset-4, zset-5]4 //递减之后排到第五位去了

Set range(K key, long start, long end);

通过索引区间返回有序集合成指定区间内的成员,其中有序集成员按分数值递增(从小到大)顺序排列

使用:System.out.println(template.opsForZSet().range("zset1",0,-1));

结果:[zset-2, zset-1, zset-3, zset-4, zset-5]

Set> rangeWithScores(K key, long start, long end);

通过索引区间返回有序集合成指定区间内的成员对象,其中有序集成员按分数值递增(从小到大)顺序排列

使用:Set> tuples = template.opsForZSet().rangeWithScores("zset1",0,-1);

Iterator> iterator =tuples.iterator();while(iterator.hasNext())

{

ZSetOperations.TypedTuple typedTuple =iterator.next();

System.out.println("value:" + typedTuple.getValue() + "score:" +typedTuple.getScore());

}

结果:value:zset-2score:1.2value:zset-1score:2.2value:zset-3score:2.3value:zset-4score:6.6value:zset-5score:9.6

Set rangeByScore(K key, double min, double max);

通过分数返回有序集合指定区间内的成员,其中有序集成员按分数值递增(从小到大)顺序排列

使用:System.out.println(template.opsForZSet().rangeByScore("zset1",0,5));

结果:[zset-2, zset-1, zset-3]

Set> rangeByScoreWithScores(K key, double min, double max);

通过分数返回有序集合指定区间内的成员对象,其中有序集成员按分数值递增(从小到大)顺序排列

使用:Set> tuples = template.opsForZSet().rangeByScoreWithScores("zset1",0,5);

Iterator> iterator =tuples.iterator();while(iterator.hasNext())

{

ZSetOperations.TypedTuple typedTuple =iterator.next();

System.out.println("value:" + typedTuple.getValue() + "score:" +typedTuple.getScore());

}

结果:value:zset-2score:1.2value:zset-1score:2.2value:zset-3score:2.3

Set rangeByScore(K key, double min, double max, long offset, long count);

通过分数返回有序集合指定区间内的成员,并在索引范围内,其中有序集成员按分数值递增(从小到大)顺序排列

使用: System.out.println(template.opsForZSet().rangeByScore("zset1",0,5));

System.out.println(template.opsForZSet().rangeByScore("zset1",0,5,1,2));

结果:[zset-2, zset-1, zset-3]

[zset-1, zset-3]

Set> rangeByScoreWithScores(K key, double min, double max, long offset, long count);

通过分数返回有序集合指定区间内的成员对象,并在索引范围内,其中有序集成员按分数值递增(从小到大)顺序排列

使用:Set> tuples = template.opsForZSet().rangeByScoreWithScores("zset1",0,5,1,2);

Iterator> iterator =tuples.iterator();while(iterator.hasNext())

{

ZSetOperations.TypedTuple typedTuple =iterator.next();

System.out.println("value:" + typedTuple.getValue() + "score:" +typedTuple.getScore());

}

结果:value:zset-1score:2.2value:zset-3score:2.3

Set reverseRange(K key, long start, long end);

通过索引区间返回有序集合成指定区间内的成员,其中有序集成员按分数值递减(从大到小)顺序排列

使用:System.out.println(template.opsForZSet().reverseRange("zset1",0,-1));

结果:[zset-5, zset-4, zset-3, zset-1, zset-2]

Set> reverseRangeWithScores(K key, long start, long end);

通过索引区间返回有序集合成指定区间内的成员对象,其中有序集成员按分数值递减(从大到小)顺序排列

使用:Set> tuples = template.opsForZSet().reverseRangeWithScores("zset1",0,-1);

Iterator> iterator =tuples.iterator();while(iterator.hasNext())

{

ZSetOperations.TypedTuple typedTuple =iterator.next();

System.out.println("value:" + typedTuple.getValue() + "score:" +typedTuple.getScore());

}

结果:value:zset-5score:9.6value:zset-4score:6.6value:zset-3score:2.3value:zset-1score:2.2value:zset-2score:1.2

Set reverseRangeByScore(K key, double min, double max);

使用:与rangeByScore调用方法一样,其中有序集成员按分数值递减(从大到小)顺序排列

Set> reverseRangeByScoreWithScores(K key, double min, double max);

使用:与rangeByScoreWithScores调用方法一样,其中有序集成员按分数值递减(从大到小)顺序排列

Set reverseRangeByScore(K key, double min, double max, long offset, long count);

使用:与rangeByScore调用方法一样,其中有序集成员按分数值递减(从大到小)顺序排列

Set> reverseRangeByScoreWithScores(K key, double min, double max, long offset, long count);

使用:与rangeByScoreWithScores调用方法一样,其中有序集成员按分数值递减(从大到小)顺序排列

Long count(K key, double min, double max);

通过分数返回有序集合指定区间内的成员个数

使用:System.out.println(template.opsForZSet().rangeByScore("zset1",0,5));

System.out.println(template.opsForZSet().count("zset1",0,5));

结果:[zset-2, zset-1, zset-3]3

Long size(K key);

获取有序集合的成员数,内部调用的就是zCard方法

使用:System.out.println(template.opsForZSet().size("zset1"));

结果:6

Long zCard(K key);

获取有序集合的成员数

使用:System.out.println(template.opsForZSet().zCard("zset1"));

结果:6

Double score(K key, Object o);

获取指定成员的score值

使用:System.out.println(template.opsForZSet().score("zset1","zset-1"));

结果:2.2

Long removeRange(K key, long start, long end);

移除指定索引位置的成员,其中有序集成员按分数值递增(从小到大)顺序排列

使用:System.out.println(template.opsForZSet().range("zset2",0,-1));

System.out.println(template.opsForZSet().removeRange("zset2",1,2));

System.out.println(template.opsForZSet().range("zset2",0,-1));

结果:[zset-1, zset-2, zset-3, zset-4]2[zset-1, zset-4]

Long removeRangeByScore(K key, double min, double max);

根据指定的score值得范围来移除成员

使用://System.out.println(template.opsForZSet().add("zset2","zset-1",1.1));//System.out.println(template.opsForZSet().add("zset2","zset-2",1.2));//System.out.println(template.opsForZSet().add("zset2","zset-3",2.3));//System.out.println(template.opsForZSet().add("zset2","zset-4",6.6));

System.out.println(template.opsForZSet().range("zset2",0,-1));

System.out.println(template.opsForZSet().removeRangeByScore("zset2",2,3));

System.out.println(template.opsForZSet().range("zset2",0,-1));

结果:[zset-1, zset-2, zset-3,zset-4]1[zset-1, zset-2, zset-4]

Long unionAndStore(K key, K otherKey, K destKey);

计算给定的一个有序集的并集,并存储在新的 destKey中,key相同的话会把score值相加

使用:System.out.println(template.opsForZSet().add("zzset1","zset-1",1.0));

System.out.println(template.opsForZSet().add("zzset1","zset-2",2.0));

System.out.println(template.opsForZSet().add("zzset1","zset-3",3.0));

System.out.println(template.opsForZSet().add("zzset1","zset-4",6.0));

System.out.println(template.opsForZSet().add("zzset2","zset-1",1.0));

System.out.println(template.opsForZSet().add("zzset2","zset-2",2.0));

System.out.println(template.opsForZSet().add("zzset2","zset-3",3.0));

System.out.println(template.opsForZSet().add("zzset2","zset-4",6.0));

System.out.println(template.opsForZSet().add("zzset2","zset-5",7.0));

System.out.println(template.opsForZSet().unionAndStore("zzset1","zzset2","destZset11"));

Set> tuples = template.opsForZSet().rangeWithScores("destZset11",0,-1);

Iterator> iterator =tuples.iterator();while(iterator.hasNext())

{

ZSetOperations.TypedTuple typedTuple =iterator.next();

System.out.println("value:" + typedTuple.getValue() + "score:" +typedTuple.getScore());

}

结果:value:zset-1score:2.0value:zset-2score:4.0value:zset-3score:6.0value:zset-5score:7.0value:zset-4score:12.0

Long unionAndStore(K key, Collection otherKeys, K destKey);

计算给定的多个有序集的并集,并存储在新的 destKey中

使用://System.out.println(template.opsForZSet().add("zzset1","zset-1",1.0));//System.out.println(template.opsForZSet().add("zzset1","zset-2",2.0));//System.out.println(template.opsForZSet().add("zzset1","zset-3",3.0));//System.out.println(template.opsForZSet().add("zzset1","zset-4",6.0));//

//System.out.println(template.opsForZSet().add("zzset2","zset-1",1.0));//System.out.println(template.opsForZSet().add("zzset2","zset-2",2.0));//System.out.println(template.opsForZSet().add("zzset2","zset-3",3.0));//System.out.println(template.opsForZSet().add("zzset2","zset-4",6.0));//System.out.println(template.opsForZSet().add("zzset2","zset-5",7.0));

System.out.println(template.opsForZSet().add("zzset3","zset-1",1.0));

System.out.println(template.opsForZSet().add("zzset3","zset-2",2.0));

System.out.println(template.opsForZSet().add("zzset3","zset-3",3.0));

System.out.println(template.opsForZSet().add("zzset3","zset-4",6.0));

System.out.println(template.opsForZSet().add("zzset3","zset-5",7.0));

List stringList = new ArrayList();

stringList.add("zzset2");

stringList.add("zzset3");

System.out.println(template.opsForZSet().unionAndStore("zzset1",stringList,"destZset22"));

Set> tuples = template.opsForZSet().rangeWithScores("destZset22",0,-1);

Iterator> iterator =tuples.iterator();while(iterator.hasNext())

{

ZSetOperations.TypedTuple typedTuple =iterator.next();

System.out.println("value:" + typedTuple.getValue() + "score:" +typedTuple.getScore());

}

结果:value:zset-1score:3.0value:zset-2score:6.0value:zset-3score:9.0value:zset-5score:14.0value:zset-4score:18.0

Long intersectAndStore(K key, K otherKey, K destKey);

计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合 key 中

使用:System.out.println(template.opsForZSet().intersectAndStore("zzset1","zzset2","destZset33"));

Set> tuples = template.opsForZSet().rangeWithScores("destZset33",0,-1);

Iterator> iterator =tuples.iterator();while(iterator.hasNext())

{

ZSetOperations.TypedTuple typedTuple =iterator.next();

System.out.println("value:" + typedTuple.getValue() + "score:" +typedTuple.getScore());

}

结果:value:zset-1score:2.0value:zset-2score:4.0value:zset-3score:6.0value:zset-4score:12.0

Long intersectAndStore(K key, Collection otherKeys, K destKey);

计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合 key 中

使用:List stringList = new ArrayList();

stringList.add("zzset2");

stringList.add("zzset3");

System.out.println(template.opsForZSet().intersectAndStore("zzset1",stringList,"destZset44"));

Set> tuples = template.opsForZSet().rangeWithScores("destZset44",0,-1);

Iterator> iterator =tuples.iterator();while(iterator.hasNext())

{

ZSetOperations.TypedTuple typedTuple =iterator.next();

System.out.println("value:" + typedTuple.getValue() + "score:" +typedTuple.getScore());

}

结果:value:zset-1score:3.0value:zset-2score:6.0value:zset-3score:9.0value:zset-4score:18.0

Cursor> scan(K key, ScanOptions options);

遍历zset

使用: Cursor> cursor = template.opsForZSet().scan("zzset1", ScanOptions.NONE);while(cursor.hasNext()){

ZSetOperations.TypedTuple item =cursor.next();

System.out.println(item.getValue()+ ":" +item.getScore());

}

结果:zset-1:1.0zset-2:2.0zset-3:3.0zset-4:6.0

注:TimeUnit是java.util.concurrent包下面的一个类,表示给定单元粒度的时间段

常用的颗粒度

TimeUnit.DAYS //天

TimeUnit.HOURS //小时

TimeUnit.MINUTES //分钟

TimeUnit.SECONDS //秒

TimeUnit.MILLISECONDS //毫秒

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值