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 }