예제 #1
0
        public void SortSet()
        {
            //应用场景:
            //以某个条件为权重,比如按顶的次数排序.
            //ZREVRANGE命令可以用来按照得分来获取前100名的用户,ZRANK可以用来获取用户排名,非常直接而且操作容易。
            //Redis sorted set的使用场景与set类似,区别是set不是自动有序的,而sorted set可以通过用户额外提供一个优先级(score)的参数来为成员排序,并且是插入有序的,即自动排序。
            //比如:twitter 的public timeline可以以发表时间作为score来存储,这样获取时就是自动按时间排好序的。
            //比如:全班同学成绩的SortedSets,value可以是同学的学号,而score就可以是其考试得分,这样数据插入集合的,就已经进行了天然的排序。
            //另外还可以用Sorted Sets来做带权重的队列,比如普通消息的score为1,重要消息的score为2,然后工作线程可以选择按score的倒序来获取工作任务。让重要的任务优先执行。

            var redis = new RedisHelper();

            #region "有序Set操作"
            redis.AddItemToSortedSet("SA", "B", 2);
            redis.AddItemToSortedSet("SA", "C", 1);
            redis.AddItemToSortedSet("SA", "D", 5);
            redis.AddItemToSortedSet("SA", "E", 3);
            redis.AddItemToSortedSet("SA", "F", 4);

            //有序集合降序排列
            Console.WriteLine("\n有序集合降序排列");
            redis.GetAllItemsFromSortedSetDesc("SA").ForEach(e => Console.Write(e + ","));
            Console.WriteLine("\n有序集合升序序排列");
            redis.GetAllItemsFromSortedSet("SA").ForEach(e => Console.Write(e + ","));

            redis.AddItemToSortedSet("SB", "C", 2);
            redis.AddItemToSortedSet("SB", "F", 1);
            redis.AddItemToSortedSet("SB", "D", 3);

            Console.WriteLine("\n获得某个值在有序集合中的排名,按分数的升序排列");
            Console.WriteLine(redis.GetItemIndexInSortedSet("SB", "D"));

            Console.WriteLine("\n获得有序集合中某个值得分数");
            Console.WriteLine(redis.GetItemScoreInSortedSet("SB", "D"));

            Console.WriteLine("\n获得有序集合中,某个排名范围的所有值");
            redis.GetRangeFromSortedSet("SA", 0, 3).ForEach(e => Console.Write(e + ","));

            #endregion
        }