RedisTemplate中zset类型的使用

简述

  • 上一文中简述了使用StringRedisTemplate操作redis中的set类型,今天来记录一下操作zset类型的主要方法

代码

@RunWith(SpringRunner.class)
@SpringBootTest
public class ZSetDemo {

    @Autowired
    private StringRedisTemplate redisTemplate;

    @Test
    public void test1() {
        //向集合中插入元素,并设置分数
        redisTemplate.opsForZSet().add("ranking-list", "p1", 2.1);

        //向集合中插入多个元素
        DefaultTypedTuple<String> tuple1 = new DefaultTypedTuple<String>("p2", 1.1);
        DefaultTypedTuple<String> tuple2 = new DefaultTypedTuple<String>("p3", 3.1);
        redisTemplate.opsForZSet().add("ranking-list", new HashSet<>(Arrays.asList(tuple1, tuple2)));

        //打印
        printZSet("ranking-list");
    }

    @Test
    public void test2() {
        printZSet("ranking-list");
        //从集合中删除指定元素
        redisTemplate.opsForZSet().remove("ranking-list", "p1");
        printZSet("ranking-list");
    }

    @Test
    public void test3() {
        //为指定元素加分
        Double score = redisTemplate.opsForZSet().incrementScore("ranking-list", "p1", 2);
        System.out.println(score);//返回加分后的得分
        printZSet("ranking-list");
    }

    @Test
    public void test4() {
        //返回指定成员的排名(从小到大)
        Long rank = redisTemplate.opsForZSet().rank("ranking-list", "p1");
        //从大到小
        Long reverseRank = redisTemplate.opsForZSet().reverseRank("ranking-list", "p1");
        System.out.println(rank);
        System.out.println(reverseRank);
    }

    @Test
    public void test5() {
        //返回集合内元素的排名,以及分数(从小到大)
        Set<TypedTuple<String>> tuples = redisTemplate.opsForZSet().rangeWithScores("ranking-list", 0, -1);
        for (TypedTuple<String> tuple : tuples) {
            System.out.println(tuple.getValue() + " : " + tuple.getScore());
        }
    }

    @Test
    public void test6() {
        //返回集合内元素在指定分数范围内的排名(从小到大)
        Set<String> ranking = redisTemplate.opsForZSet().rangeByScore("ranking-list", 0, 5);
        System.out.println(ranking);
        //带偏移量和个数,下例意为从第二个开始,要三个
        Set<String> ranking2 = redisTemplate.opsForZSet().rangeByScore("ranking-list", 0, 5, 1, 3);
        System.out.println(ranking2);
        //也可以带分数返回,类似于test5
    }

    @Test
    public void test7() {
        //返回集合内指定分数范围的成员个数
        Long count = redisTemplate.opsForZSet().count("ranking-list", 0, 2);
        System.out.println(count);
        //返回集合内的成员个数
        Long size = redisTemplate.opsForZSet().size("ranking-list");//等同于zCard(key);
        System.out.println(size);
    }

    @Test
    public void test8() {
        //获得指定元素的分数
        Double score = redisTemplate.opsForZSet().score("ranking-list", "p1");
        System.out.println(score);
    }

    @Test
    public void test9() {
        //删除指定索引范围的元素
        printZSet("ranking-list");
        redisTemplate.opsForZSet().removeRange("ranking-list", 0, 0);
        printZSet("ranking-list");
    }

    @Test
    public void test10() {
        //删除指定分数范围内的元素
        printZSet("ranking-list");
        redisTemplate.opsForZSet().removeRangeByScore("ranking-list", 4, 5);
        printZSet("ranking-list");
        redisTemplate.opsForZSet();
    }

    //求交集并集与set类似

    private void printZSet(String key) {
        //按照排名先后(从小到大)打印指定区间内的元素, -1为打印全部
        Set<String> range = redisTemplate.opsForZSet().range(key, 0, -1);
        //reverseRange 从大到小
        System.out.println(range);
    }

}

小礼物走一走,来简书关注我

原文地址:https://www.cnblogs.com/zhuyeshen/p/11433801.html

时间: 2024-10-13 23:01:12

RedisTemplate中zset类型的使用的相关文章

小贝_redis set/zset类型学习

redis  set.zset类型 一.集合类型 二.查看set.zset集合类型命令 三.set.zset集合类型实例 一.集合类型 1.redis的集合类型,分为两种,即有序和无序. 2.既然是集合类型,因此也要满足集合的特性即 a.集合的确定性: 组成集合的元素的性质必须明确,不允许有模棱两可.含混不清的情况 b.集合的互异性: 对于一个给定的集合,集合中的元素是互异的",就是说,"对于一个给定的集合,它的任何两个元素都是不同的 c.集合的无序性: 指表示一个集合时,构成这个集合

redis(五)、Set类型和zSet类型

一.set集合是String类型的无序集合,set是通过hshatable实现的,对集合可以进行取交集.并集.差集操作. 1.sadd方法:插入元素, 如:sadd set1 aaa:不允许元素重复. smembers set1:查看元素: 2.srem方法:删除set集合元素: 3.spop方法:随机返回删除的key: 4.sdiff方法:返回两个集合的不同元素(哪个集合在前面就以哪个集合为标准): 5.sdiifstore方法:将返回的不同元素存储到另一个集合里: 如:sdiffstore

函数中的类型是怎么工作的

函数中的类型是怎么工作的 理解类型标记 我们已经理解函数了,看看函数中的类型是怎么工作的,还有域和范围.这只是一个概述,这个"understandingF# types"系列会为你详细介绍. 首先,我们应该多理解类型符号一点.我们之后箭头符号用于域和范围,所以它总是像函数签名: val functionName : domain -> range 看这些示例函数 : let intToString x = sprintf "x is %i" x // form

第66课 C++中的类型识别

1. 类型识别 (1)在面向对象中可能出现下面的情况 ①基类指针指向子类对象 ②基类引用成为子类对象的别名 ▲静态类型——变量(对象)自身的类型(定义变量类型时类型或参数类型) ▲动态类型——指针(引用)所指向的对象的实际类型 (2)基类指针转子类指针: ①示例:Derived* d = static_cast<Derived*>(pBase); //危险的转换方式 ②问题:不安全,是否能强制类型转换取决动态类型. 2. 利用多态获取动态类型 (1)解决方案 ①在基类中定义虚函数,并返回具体的

NET中的类型和装箱/拆箱原理

谈到装箱拆箱,DebugLZQ相信给位园子里的博友一定可以娓娓道来,大概的意思就是值类型和引用类型的相互转换呗---值类型到引用类型叫装箱,反之则叫拆箱.这当然没有问题,可是你只知道这么多,那么DebugLZQ建议你花点时间看看楼主这篇文章,继续前几篇博文的风格--浅谈杂侃. 1. .NET中的类型 为了说明装箱和拆箱,那首先必须先说类型.在.NET中,我们知道System.Object类型是所有内建类型的基类.注意这里说的是内建类型,程序员可以编写不继承子自System.Object的类型,这

Scala 深入浅出实战经典 第53讲:Scala中结构类型实战详解

王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 腾讯微云:http://url.cn/TnGbdC 360云盘:http://yunpan.cn/cQ4c2UALDjSKy 访问密码 45e2土豆:http://www.tudou.com/programs/view/pR_4sY0cJLs/优酷:http://v.youku.com/v_show/id_

JS中的类型检测

JS中用于类型检测的函数有typeof.instanceof .Object.prototype.toString.constrcutor.duck type typeof用于检测基本类型和函数 有些特殊情况 null.数组.Date数据类型用typeof判断返回的是object instanceof用来判断对象类型,基于原型链,可以用来判断数组和Date数据类型

泛型中的类型约束和类型推断

前一篇文章介绍了泛型的基本概念.在本文中,我们看一下泛型中两个很重要的特性:类型约束和类型推断. 类型约束 相信你还记得前面一篇文章中的泛型方法,在这个泛型方法中,我们就使用了类型约束. 类型约束(type constraint)进一步控制了可指定的类型实参,当我们创建自己的泛型类型或者泛型方法的时候,类型约束是很有用的. 回到前一篇例子中的泛型方法,这个泛型方法就要求可指定的类型实参必须实现了IComparable接口. 为什么会有这个约束呢?原因很简单,因为我们在泛型方法的实现中直接调用T类

C#中值类型和引用类型

本文将介绍C#类型系统中的值类型和引用类型,以及两者之间的一些区别.同时,还会介绍一下装箱和拆箱操作. 值类型和引用类型 首先,我们看看在C#中哪些类型是值类型,哪些类型是引用类型. 值类型: 基础数据类型(string类型除外):包括整型.浮点型.十进制型.布尔型. 整型(sbyte.byte.char.short.ushort.int.uint.long.ulong ) 浮点型(float 和 double ) 十进制型(decimal ) 布尔型(bool ) 结构类型(struct) 枚