Sorted Set有点像Set和Hash的结合体。
和Set一样,它里面的元素是唯一的,类型是String,所以它可以理解为就是一个Set。
但是Set里面的元素是无序的,而Sorted Set里面的元素都带有一个浮点值,叫做分数(score),所以这一点和Hash有点像,因为每个元素都映射到了一个值。
Sorted Set是有序的,规则如下:
如果A.score > B.score,那么A > B。
如果A.score == B.score,那么A和B的大小就通过比较字符串来决定了,而A和B的字符串是不会相等的,因为Sorted Set里面的值都是唯一的。

ZADD

ZADD可以添加元素到Sorted Set,就和Set的SADD命令差不多

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

Redis数据类型SortedSET 随笔 第1张

ZRANGE,ZREVRANGE

ZRANGE默认按分数由低到高把Sorted Set的元素显示出来

 Redis数据类型SortedSET 随笔 第2张

想按分数要从高到低显示,需要使用ZREVRANGE

 Redis数据类型SortedSET 随笔 第3张

也可以一同把分数显示出来,使用参数WITHSCORES

Redis数据类型SortedSET 随笔 第4张

ZRANGEBYSCORE

 ZRANGEBYSCORE可以按范围显示Sorted Set,格式是zrangebyscore key 分数下限 分数上限

Redis数据类型SortedSET 随笔 第5张

可以看到结果也包括了分数下限和分数上限这两个边

ZREMRANGEBYSCORE

ZREMRANGEBYSCORE可以按范围移除元素

该命令返回的是移除元素的个数。

其中-inf和inf分别表示负无穷和正无穷。

Redis数据类型SortedSET 随笔 第6张

ZRANK,ZREVRANK

 ZRANK命令可以获得元素的排名, ZREVRANK 反之

Redis数据类型SortedSET 随笔 第7张

词典分数

 Sorted Set里分数相同的元素是按照词典分数(可以理解为比较字符串)进行排序的

Redis数据类型SortedSET 随笔 第8张

ZRANGEBYLEX

ZRANGEBYLEX可以按词典范围展示Sorted Set

Redis数据类型SortedSET 随笔 第9张

可以看到该命令把开头字目为A到F(不包括F)的元素都显示了出来

 还有ZREVRANGEBYLEXZREMRANGEBYLEXZLEXCOUNT等针对词典的命令,请自行探索。

C#操作SortedSET

 class Program
    {
        static void Main(string[] args)
        {
            ConnectionMultiplexer connectionMultiplexer = ConnectionMultiplexer.Connect("120.132.116.153:6379");
            IDatabase db = connectionMultiplexer.GetDatabase(0);
            db.KeyDelete("players");
            db.KeyDelete("names");
            //ZADD
            db.SortedSetAdd("players", "a1", 10);
            db.SortedSetAdd("players", new SortedSetEntry[]
            {
                new SortedSetEntry("b2",21),
                new SortedSetEntry("b3",22),
                new SortedSetEntry("a2",11),
                new SortedSetEntry("a5",14),
                new SortedSetEntry("a6",15),
                new SortedSetEntry("a3",12),
                new SortedSetEntry("a4",13),
                new SortedSetEntry("b4",23),
                new SortedSetEntry("b5",24),
                new SortedSetEntry("b6",25),
            });
            //ZRANGE
            var lists = db.SortedSetRangeByRank("players", 0, -1);
            foreach (var item in lists)
            {
                Console.WriteLine($"{item}");
            }
            Console.WriteLine("----------------------------");

            //ZREVRANGE WITHSCORES 
            var lists1 = db.SortedSetRangeByRankWithScores("players", 0, -1, Order.Descending);
            foreach (var item in lists1)
            {
                Console.WriteLine($"{item}");
            }
            Console.WriteLine("----------------------------");

            //ZRANGEBYSCORE WITHSCORES 
            var list2 = db.SortedSetRangeByScoreWithScores("players", 10, 15);
            foreach (var item in list2)
            {
                Console.WriteLine($"{item}");
            }
            Console.WriteLine("----------------------------");

            //ZREMRANGEBYSCORE
            Console.WriteLine($"{db.SortedSetRemoveRangeByScore("players", double.NegativeInfinity, 15)}");
            var lists3 = db.SortedSetRangeByRankWithScores("players", 0, -1);
            foreach (var item in lists3)
            {
                Console.WriteLine($"{item}");
            }
            Console.WriteLine("----------------------------");
            //ZRANK
            Console.WriteLine($"a1排名顺序:{db.SortedSetRank("players", "b2")}");
            Console.WriteLine($"a1排名倒序:{db.SortedSetRank("players", "b2", Order.Descending)}");
            Console.WriteLine("----------------------------");
          
            db.SortedSetAdd("names", new SortedSetEntry[]
            {
                new SortedSetEntry("AB",0),
                new SortedSetEntry("BERRD",0),
                new SortedSetEntry("CBsdad",0),
                new SortedSetEntry("DBasd",0),
                new SortedSetEntry("EBasd",0),
                new SortedSetEntry("FBad",0),
                new SortedSetEntry("HBasd",0),
                new SortedSetEntry("3Basd",0),
                new SortedSetEntry("7Bfh",0),
                new SortedSetEntry("6Bfgh",0),
            });
            //ZRANGEBYLEX
            var lists4 = db.SortedSetRangeByValue("names", "C", "F");
            foreach (var item in lists4)
            {
                Console.WriteLine($"{item}");
            }
            Console.ReadLine();
        }
    }

 

Redis数据类型SortedSET 随笔 第10张

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄