• 使用redis zset 数据结构进行分数排名


    package com.mybatis.plus;
    
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.data.redis.core.*;
    import org.springframework.test.context.junit4.SpringRunner;
    
    import java.util.HashSet;
    import java.util.Set;
    
    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class TestClass {
    
        @Autowired
        private RedisTemplate<String, String> redisTemplate;
        /**
         * zset(Sorted Set 有序集合)也是 string 类型元素的集合,且不允许重复的成员。每个元素都会关联一个 double 类型的分数。可以通过分数将该集合中的成员从小到大进行排序。
         *
         * zset 的成员是唯一的,但权重参数分数(score)却可以重复。集合中的元素能够按 score 进行排列。它可以用来做排行榜应用、取TOP/N、延时任务、范围查找等。
         *
         * 使用redisTemplate.opsForZSet() 操作ZSet集合
         * Boolean add(K var1, V var2, double var3);
         * Long add(K key, Set<ZSetOperations.TypedTuple<V>> tuples)            增加一个有序集合
         *
         * Long remove(K key, Object... values)    从有序集合中移除一个或者多个元素
         *
         * Set<V> range(K KET, long var2, long var4);   查看ZSet集合中的元素
         *
         * Long rank(K key, Object value)   返回有序集中指定成员的排名,其中有序集成员按分数值递增(从小到大)顺序排列
         *
         * rank  返回有序集中指定成员的排名,    其中有序集成员按分数值递增(从小到大)顺序排列
         *
         * range方法:通过索引区间返回有序集合成指定区间内的成员,其中有序集成员按分数值递增(从小到大)顺序排列。
         *
         * rangeByScore方法:通过分数区间返回有序集合成指定区间内的成员,其中有序集成员按分数值递增(从小到大)顺序排列。
         *
         * count方法:通过分数返回有序集合指定区间内的成员个数。
         *
         * size方法:获取有序集合的成员数。
         */
        @Test
        public void test5(){
    
            redisTemplate.opsForZSet().add("StudentZSet","99",9.9);
            redisTemplate.opsForZSet().add("StudentZSet","80",8.0);
            redisTemplate.opsForZSet().add("StudentZSet","69",6.9);
            redisTemplate.opsForZSet().add("StudentZSet","52",5.4);
            redisTemplate.opsForZSet().add("StudentZSet","32",3.4);
            redisTemplate.opsForZSet().add("StudentZSet","23",3.9);
    
            System.out.println(redisTemplate.opsForZSet().range("StudentZSet",0,-1));
            // 移除ZSet中的一个或多个元素
            redisTemplate.opsForZSet().remove("StudentZSet","69");
            System.out.println("移除ZSet中的一个或多个元素:"+redisTemplate.opsForZSet().range("StudentZSet",0,-1));
            //通过分数区间返回有序集合成指定区间内的成员,其中有序集成员按分数值递增(从小到大)顺序排列。
            System.out.println("通过分数区间返回有序集合成指定区间内的成员:"+redisTemplate.opsForZSet().rangeByScore("StudentZSet", 3, 8));
    
            System.out.println("分数在4至8区间内的成员个数:" + redisTemplate.opsForZSet().count("StudentZSet", 4, 8));
    
            // 遍历 zset
            Cursor<ZSetOperations.TypedTuple<String>> cursor = redisTemplate.opsForZSet().scan("StudentZSet", ScanOptions.NONE);
            while (cursor.hasNext()){
                ZSetOperations.TypedTuple<String> next = cursor.next();
                //System.out.println(next); // 打印的对象地址 org.springframework.data.redis.core.DefaultTypedTuple@35698b75
                System.out.println(next.getValue() + " 的分数值:" + next.getScore());
    
            }
    
        }
    
    }
  • 相关阅读:
    PNG背景透明问题
    多文件上传
    Silverlight+WCF 新手实例 象棋 游戏房间列表(十三)
    Silverlight+WCF 新手实例 象棋 房间状态更新(二十)
    Silverlight+WCF 新手实例 象棋 WCF通讯基础(十四)
    Silverlight+WCF 新手实例 象棋 登陆与转向(十一)
    Silverlight+WCF 新手实例 象棋 回归WCF通讯应用登陆(十八)
    Silverlight+WCF 新手实例 象棋 棋子移动吃子(五)
    Silverlight+WCF 新手实例 象棋 游戏房间(十二)
    Silverlight+WCF 新手实例 象棋 棋子移动规则[附加上半盘限制](十)
  • 原文地址:https://www.cnblogs.com/guanxiaohe/p/16044698.html
Copyright © 2020-2023  润新知