Spring中使用RedisTemplate操作Redis(spring(9)

使用:System.out.println("setTest:" + template.opsForSet().members("setTest"));
      System.out.println("setTestrandomMember:" + template.opsForSet().randomMember("setTest"));
      System.out.println("setTestrandomMember:" + template.opsForSet().randomMember("setTest"));
      System.out.println("setTestrandomMember:" + template.opsForSet().randomMember("setTest"));
      System.out.println("setTestrandomMember:" + template.opsForSet().randomMember("setTest"));
结果:setTest:[ddd, bbb, aaa, ccc]
setTestrandomMember:aaa
setTestrandomMember:bbb
setTestrandomMember:aaa
setTestrandomMember:ddd

•Set<V> distinctRandomMembers(K key, long count);
获取多个key无序集合中的元素(去重),count表示个数

使用:System.out.println("randomMembers:" + template.opsForSet().distinctRandomMembers("setTest",5));
结果:randomMembers:[aaa, bbb, ddd, ccc]

•List<V> randomMembers(K key, long count);
获取多个key无序集合中的元素,count表示个数

使用:System.out.println("randomMembers:" + template.opsForSet().randomMembers("setTest",5));
结果:randomMembers:[ccc, ddd, ddd, ddd, aaa]

•Cursor<V> scan(K key, ScanOptions options);
遍历set

使用:    Cursor<Object> curosr = template.opsForSet().scan("setTest", ScanOptions.NONE);
      while(curosr.hasNext()){
          System.out.println(curosr.next());
      }
结果:ddd
bbb
aaa
ccc

Redis的ZSet数据结构

Redis有序集合和无序集合一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
有序集合的成员是唯一的,但分数(score)却可以重复。
public interface ZSetOperations<K,V>
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<TypedTuple<V>> tuples);
新增一个有序集合

使用:ZSetOperations.TypedTuple<Object> objectTypedTuple1 = new DefaultTypedTuple<Object>("zset-5",9.6);
      ZSetOperations.TypedTuple<Object> objectTypedTuple2 = new DefaultTypedTuple<Object>("zset-6",9.9);
      Set<ZSetOperations.TypedTuple<Object>> tuples = new HashSet<ZSetOperations.TypedTuple<Object>>();
      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<V> 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]

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/8f96c330d6318f32beb9e4557005b934.html