From fa9703474a81b19c985a65291327a7f2b0256029 Mon Sep 17 00:00:00 2001 From: bicijinlian Date: Thu, 5 Jul 2018 16:32:09 +0800 Subject: [PATCH] Sorted Set --- RedisStudyTest/RedisSortedSetStudyTest.cs | 79 +++++++++++++++++++++++ RedisStuy/RedisSortedSetStudy.cs | 6 +- 2 files changed, 82 insertions(+), 3 deletions(-) diff --git a/RedisStudyTest/RedisSortedSetStudyTest.cs b/RedisStudyTest/RedisSortedSetStudyTest.cs index b9cd168..745d966 100644 --- a/RedisStudyTest/RedisSortedSetStudyTest.cs +++ b/RedisStudyTest/RedisSortedSetStudyTest.cs @@ -329,6 +329,85 @@ namespace RedisStudyTest #endregion + #region SortedSetRank + + [Fact] + public void SortedSetRank_NotKey_Test() + { + var index = redisSortedSetStudy.SortedSetRank(defaultRedisKey, "first"); + + Assert.Null(index); + } + + [Fact] + public void SortedSetRankTest() + { + SortedSetEntry[] sortedSetEntries = new SortedSetEntry[] + { + new SortedSetEntry("first",1), + new SortedSetEntry("second",2), + new SortedSetEntry("third",3), + new SortedSetEntry("four",4), + new SortedSetEntry("five",5), + }; + redisSortedSetStudy.SortedSetAdd(defaultRedisKey, sortedSetEntries); + + long? memberRank = null; + memberRank = redisSortedSetStudy.SortedSetRank(defaultRedisKey, "first"); + Assert.Equal(0, memberRank); + + memberRank = redisSortedSetStudy.SortedSetRank(defaultRedisKey, "second"); + Assert.Equal(1, memberRank); + + memberRank = redisSortedSetStudy.SortedSetRank(defaultRedisKey, "third"); + Assert.Equal(2, memberRank); + + memberRank = redisSortedSetStudy.SortedSetRank(defaultRedisKey, "four"); + Assert.Equal(3, memberRank); + + memberRank = redisSortedSetStudy.SortedSetRank(defaultRedisKey, "five"); + Assert.Equal(4, memberRank); + } + #endregion + + #region SortedSetRangeByRank + + [Fact] + public void SortedSetRangeByRank_NotKey_Test() + { + var members = redisSortedSetStudy.SortedSetRangeByRank(defaultRedisKey); + Assert.Empty(members); + } + + [Fact] + public void SortedSetRangeByRankTest() + { + SortedSetEntry[] sortedSetEntries = new SortedSetEntry[] + { + new SortedSetEntry("first",1), + new SortedSetEntry("second",2), + new SortedSetEntry("third",3), + new SortedSetEntry("four",4), + new SortedSetEntry("five",5), + }; + redisSortedSetStudy.SortedSetAdd(defaultRedisKey, sortedSetEntries); + + var members = redisSortedSetStudy.SortedSetRangeByRank(defaultRedisKey); + Assert.NotEmpty(members); + for (var i=0; i< sortedSetEntries.Length; i++) + { + Assert.Equal(sortedSetEntries[0].Element, members[0]); + } + + members = redisSortedSetStudy.SortedSetRangeByRank(defaultRedisKey, 1, -1, Order.Descending, CommandFlags.None); + //four third second first + Assert.Equal(sortedSetEntries[3].Element, members[0]); + Assert.Equal(sortedSetEntries[2].Element, members[1]); + Assert.Equal(sortedSetEntries[1].Element, members[2]); + Assert.Equal(sortedSetEntries[0].Element, members[3]); + } + #endregion + #region 清理 public void Dispose() { diff --git a/RedisStuy/RedisSortedSetStudy.cs b/RedisStuy/RedisSortedSetStudy.cs index 6ae6e21..72c66c4 100644 --- a/RedisStuy/RedisSortedSetStudy.cs +++ b/RedisStuy/RedisSortedSetStudy.cs @@ -121,9 +121,9 @@ namespace RedisStuy /// /// 通过分数返回有序集合指定区间内的成员 - /// 有序集成员按分数值递增(从小到大)次序排列。 - /// 具有相同分数值的成员按字典序来排列(该属性是有序集提供的,不需要额外的计算)。 - /// 默认情况下,区间的取值使用闭区间(小于等于或大于等于),你也可以通过给参数前增加(符号来使用可选的开区间 (小于或大于)。 + /// 默认从最低到最高得分排序,字典顺序用于等分元素。 + /// 启动和停止都是基于零的索引,其中0是第一个元素,1是下一个元素,等等。 + /// 负数时 -1是最后一个元素,-2是倒数第二元素,类推。 /// public RedisValue[] SortedSetRangeByRank(RedisKey key, long start = 0, long stop = -1, Order order = Order.Ascending, CommandFlags flags = CommandFlags.None) {