diff --git a/RedisStudyTest/RedisSortedSetStudyTest.cs b/RedisStudyTest/RedisSortedSetStudyTest.cs index ac68bc5..420388c 100644 --- a/RedisStudyTest/RedisSortedSetStudyTest.cs +++ b/RedisStudyTest/RedisSortedSetStudyTest.cs @@ -40,7 +40,7 @@ namespace RedisStudyTest } #endregion - #region SetAdd + #region SortedSetAdd [Fact] public void SortedAdd_NotKey_Test() @@ -370,6 +370,15 @@ namespace RedisStudyTest } #endregion + #region SortedSetScore + + [Fact] + public void SortedSetScoreTest() + { + //redisSortedSetStudy.SortedSetScore(); + } + #endregion + #region SortedSetRangeByRank [Fact] @@ -408,166 +417,40 @@ namespace RedisStudyTest } #endregion - #region SortedSetLengthByValue - + #region SortedSetRangeByRankWithScores [Fact] - public void SortedSetRangeByValue_NotKey_Test() + public void SortedSetRangeByRankWithScores_NotKey_Test() { - var mumbers = redisSortedSetStudy.SortedSetRangeByValue(defaultRedisKey, 0, -1); - - Assert.Empty(mumbers); + var sortedSetEntries = redisSortedSetStudy.SortedSetRangeByRankWithScores(defaultRedisKey); + Assert.Empty(sortedSetEntries); } - /// - /// 排它性参数Exclude设置 测试 - /// [Fact] - public void SortedSetRangeByValue_Exclude_Test() + public void SortedSetRangeByRankWithScoresTest() { SortedSetEntry[] sortedSetEntries = new SortedSetEntry[] { - new SortedSetEntry("first",0), - new SortedSetEntry("second",0), - new SortedSetEntry("third",0), - new SortedSetEntry("four",0), - new SortedSetEntry("five",0), + new SortedSetEntry("first",1), + new SortedSetEntry("second",2), + new SortedSetEntry("third",3), + new SortedSetEntry("four",4), + new SortedSetEntry("five",5), }; redisSortedSetStudy.SortedSetAdd(defaultRedisKey, sortedSetEntries); - //默认:Exclude.None [Start,Stop] - var members = redisSortedSetStudy.SortedSetRangeByValue(defaultRedisKey, "first", "second", Exclude.None); - //firt five four second - Assert.Equal(4, members.Length); - - //Exclude.Start (Start,Stop] - members = redisSortedSetStudy.SortedSetRangeByValue(defaultRedisKey, "first", "second", Exclude.Start); - //five four second - Assert.Equal(3, members.Length); - - //Exclude.Stop [Start,Stop) - members = redisSortedSetStudy.SortedSetRangeByValue(defaultRedisKey, "first", "four", Exclude.Stop); - Assert.Equal(2, members.Length); - - //Exclude.Both (Start,Stop) - members = redisSortedSetStudy.SortedSetRangeByValue(defaultRedisKey, "first", "four", Exclude.Both); - Assert.Single(members); - } - - /// - /// 分数相同,字典排序,逐字符比较(汉字的比较等待确认) - /// 字典顺序(”0”<…<”9”<”A”<…<”Z”<”a”<…<”z”) - /// - [Fact] - public void SortedSetRangeByValueTest() - { - SortedSetEntry[] sortedSetEntries = new SortedSetEntry[] + var queryEntries = redisSortedSetStudy.SortedSetRangeByRankWithScores(defaultRedisKey); + Assert.NotEmpty(queryEntries); + for (var i = 0; i < sortedSetEntries.Length; i++) { - new SortedSetEntry("Andy",0), - new SortedSetEntry("and",0), - new SortedSetEntry("And",0), - new SortedSetEntry("Banana",0), - new SortedSetEntry("color",0), - new SortedSetEntry("query",0), - new SortedSetEntry("remove",0), - new SortedSetEntry("101",0), - new SortedSetEntry("304",0), - new SortedSetEntry("404",0), - new SortedSetEntry("王高峰",0), - new SortedSetEntry("刘山东",0), - }; - redisSortedSetStudy.SortedSetAdd(defaultRedisKey, sortedSetEntries); - - //数字排序 - var members = redisSortedSetStudy.SortedSetRangeByValue(defaultRedisKey, "0", "5"); - Assert.Contains("101", members); - Assert.Contains("304", members); - Assert.Contains("404", members); - - members = redisSortedSetStudy.SortedSetRangeByValue(defaultRedisKey, "10", "4"); - Assert.Contains("101", members); - Assert.Contains("304", members); - - members = redisSortedSetStudy.SortedSetRangeByValue(defaultRedisKey, "11", "40"); - Assert.Contains("304", members); - - //字母排序 - members = redisSortedSetStudy.SortedSetRangeByValue(defaultRedisKey, "And", "color"); - //And Andy Banana and color - Assert.Contains("And", members); - Assert.Contains("Andy", members); - Assert.Contains("Banana", members); - Assert.Contains("and", members); - Assert.Contains("color", members); - - members = redisSortedSetStudy.SortedSetRangeByValue(defaultRedisKey, "A", "color"); - //And Andy Banana and color - Assert.Contains("And", members); - Assert.Contains("Andy", members); - Assert.Contains("Banana", members); - Assert.Contains("and", members); - Assert.Contains("color", members); - - members = redisSortedSetStudy.SortedSetRangeByValue(defaultRedisKey, "A", "B"); - //And Andy 不包括Banana,因为Ba排在B后 - Assert.Contains("And", members); - Assert.Contains("Andy", members); - - members = redisSortedSetStudy.SortedSetRangeByValue(defaultRedisKey, "A", "Bb"); - //And Andy Banana - Assert.Contains("And", members); - Assert.Contains("Andy", members); - Assert.Contains("Banana", members); - - //TODO:汉字排序规则不清楚 - members = redisSortedSetStudy.SortedSetRangeByValue(defaultRedisKey, "王", "赵"); - //王高峰 - Assert.Contains("王高峰", members); - } - - /// - /// 分页测试 - /// - [Fact] - public void SortedSetRangeByValue_Page_Test() - { - SortedSetEntry[] sortedSetEntries = new SortedSetEntry[] - { - new SortedSetEntry("Andy",0), - new SortedSetEntry("and",0), - new SortedSetEntry("And",0), - new SortedSetEntry("Banana",0), - new SortedSetEntry("color",0), - new SortedSetEntry("query",0), - new SortedSetEntry("remove",0), - new SortedSetEntry("101",0), - new SortedSetEntry("304",0), - new SortedSetEntry("404",0), - new SortedSetEntry("王高峰",0), - new SortedSetEntry("刘山东",0), - }; - redisSortedSetStudy.SortedSetAdd(defaultRedisKey, sortedSetEntries); - - //第一页 - var members = redisSortedSetStudy.SortedSetRangeByValue(defaultRedisKey, "101", "remove", Exclude.None, 0, 4, CommandFlags.None); - Assert.Equal(4, members.Length); - Assert.Contains("101", members); - Assert.Contains("304", members); - Assert.Contains("404", members); - Assert.Contains("And", members); + Assert.Equal(sortedSetEntries[0], queryEntries[0]); + } - //第2页 - members = redisSortedSetStudy.SortedSetRangeByValue(defaultRedisKey, "101", "remove", Exclude.None, 4, 4, CommandFlags.None); - Assert.Equal(4, members.Length); - Assert.Contains("Andy", members); - Assert.Contains("Banana", members); - Assert.Contains("and", members); - Assert.Contains("color", members); - - //第3页 - members = redisSortedSetStudy.SortedSetRangeByValue(defaultRedisKey, "101", "remove", Exclude.None, 8, 4, CommandFlags.None); - Assert.Equal(2, members.Length); - Assert.Contains("query", members); - Assert.Contains("remove", members); + queryEntries = redisSortedSetStudy.SortedSetRangeByRankWithScores(defaultRedisKey, 1, -1, Order.Descending, CommandFlags.None); + //four third second first + Assert.Equal(sortedSetEntries[3], queryEntries[0]); + Assert.Equal(sortedSetEntries[2], queryEntries[1]); + Assert.Equal(sortedSetEntries[1], queryEntries[2]); + Assert.Equal(sortedSetEntries[0], queryEntries[3]); } #endregion @@ -742,6 +625,340 @@ namespace RedisStudyTest #endregion + #region SortedSetRangeByScoreWithScores + [Fact] + public void SortedSetRangeByScoreWithScores_NotKey_Test() + { + var members = redisSortedSetStudy.SortedSetRangeByScoreWithScores(defaultRedisKey); + Assert.Empty(members); + } + + /// + /// 排它性参数Exclude设置 测试 + /// + [Fact] + public void SortedSetRangeByScoreWithScores_Exclude_Test() + { + 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); + + //默认:Exclude.None [Start,Stop] + var queryEntries = redisSortedSetStudy.SortedSetRangeByScoreWithScores(defaultRedisKey, 2, 4, Exclude.None); + Assert.Equal(3, queryEntries.Length); + Assert.Contains("second", queryEntries[0].Element); + Assert.Contains("third", queryEntries[1].Element); + Assert.Contains("four", queryEntries[2].Element); + + //Exclude.Start (Start,Stop] + queryEntries = redisSortedSetStudy.SortedSetRangeByScoreWithScores(defaultRedisKey, 2, 4, Exclude.Start); + Assert.Equal(2, queryEntries.Length); + Assert.Contains("third", queryEntries[0].Element); + Assert.Contains("four", queryEntries[1].Element); + + //Exclude.Stop [Start,Stop) + queryEntries = redisSortedSetStudy.SortedSetRangeByScoreWithScores(defaultRedisKey, 2, 4, Exclude.Stop); + Assert.Equal(2, queryEntries.Length); + Assert.Contains("second", queryEntries[0].Element); + Assert.Contains("third", queryEntries[1].Element); + + //Exclude.Both (Start,Stop) + queryEntries = redisSortedSetStudy.SortedSetRangeByScoreWithScores(defaultRedisKey, 2, 4, Exclude.Both); + Assert.Single(queryEntries); + Assert.Contains("third", queryEntries[0].Element); + } + + /// + /// 排序参数测试 + /// + [Fact] + public void SortedSetRangeByScoreWithScores_Sort_Test() + { + 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 queryEntries = redisSortedSetStudy.SortedSetRangeByScoreWithScores(defaultRedisKey, 2, 4, Exclude.None, Order.Ascending); + Assert.Equal(3, queryEntries.Length); + Assert.Equal("second", queryEntries[0].Element); + Assert.Equal("third", queryEntries[1].Element); + Assert.Equal("four", queryEntries[2].Element); + + //降序 + queryEntries = redisSortedSetStudy.SortedSetRangeByScoreWithScores(defaultRedisKey, 2, 4, Exclude.None, Order.Descending); + Assert.Equal(3, queryEntries.Length); + Assert.Equal("four", queryEntries[0].Element); + Assert.Equal("third", queryEntries[1].Element); + Assert.Equal("second", queryEntries[2].Element); + } + + /// + /// 分页测试 + /// + [Fact] + public void SortedSetRangeByScoreWithScores_Page_Test() + { + SortedSetEntry[] sortedSetEntries = new SortedSetEntry[] + { + new SortedSetEntry("Andy",1), + new SortedSetEntry("and",2), + new SortedSetEntry("And",3), + new SortedSetEntry("Banana",4), + new SortedSetEntry("color",5), + new SortedSetEntry("query",6), + new SortedSetEntry("remove",7), + new SortedSetEntry("101",8), + new SortedSetEntry("304",9), + new SortedSetEntry("404",10), + new SortedSetEntry("王高峰",11), + new SortedSetEntry("刘山东",12), + }; + redisSortedSetStudy.SortedSetAdd(defaultRedisKey, sortedSetEntries); + + //第一页 + var queryEntries = redisSortedSetStudy.SortedSetRangeByScoreWithScores(defaultRedisKey, double.MinValue, double.MaxValue, Exclude.None, Order.Ascending, 0, 4, CommandFlags.None); + Assert.Equal(4, queryEntries.Length); + Assert.Equal(sortedSetEntries[0], queryEntries[0]); + Assert.Equal(sortedSetEntries[1], queryEntries[1]); + Assert.Equal(sortedSetEntries[2], queryEntries[2]); + Assert.Equal(sortedSetEntries[3], queryEntries[3]); + + //第2页 + queryEntries = redisSortedSetStudy.SortedSetRangeByScoreWithScores(defaultRedisKey, double.NegativeInfinity, double.PositiveInfinity, Exclude.None, Order.Ascending, 4, 4, CommandFlags.None); + Assert.Equal(4, queryEntries.Length); + Assert.Equal(sortedSetEntries[4], queryEntries[0]); + Assert.Equal(sortedSetEntries[5], queryEntries[1]); + Assert.Equal(sortedSetEntries[6], queryEntries[2]); + Assert.Equal(sortedSetEntries[7], queryEntries[3]); + + //第3页 + queryEntries = redisSortedSetStudy.SortedSetRangeByScoreWithScores(defaultRedisKey, double.NegativeInfinity, double.PositiveInfinity, Exclude.None, Order.Ascending, 8, 4, CommandFlags.None); + Assert.Equal(4, queryEntries.Length); + Assert.Equal(sortedSetEntries[8], queryEntries[0]); + Assert.Equal(sortedSetEntries[9], queryEntries[1]); + Assert.Equal(sortedSetEntries[10], queryEntries[2]); + Assert.Equal(sortedSetEntries[11], queryEntries[3]); + } + + [Fact] + public void SortedSetRangeByScoreWithScoresTest() + { + SortedSetEntry[] sortedSetEntries = new SortedSetEntry[] + { + new SortedSetEntry("Andy",1), + new SortedSetEntry("and",2), + new SortedSetEntry("And",3), + new SortedSetEntry("Banana",4), + new SortedSetEntry("color",5), + new SortedSetEntry("query",6), + new SortedSetEntry("remove",7), + new SortedSetEntry("101",8), + new SortedSetEntry("304",9), + new SortedSetEntry("404",10), + new SortedSetEntry("王高峰",11), + new SortedSetEntry("刘山东",12), + }; + redisSortedSetStudy.SortedSetAdd(defaultRedisKey, sortedSetEntries); + + var queryEntries = redisSortedSetStudy.SortedSetRangeByScoreWithScores(defaultRedisKey, 1, 5); + Assert.Equal(5, queryEntries.Length); + Assert.Equal("Andy", queryEntries[0].Element); + Assert.Equal("and", queryEntries[1].Element); + Assert.Equal("And", queryEntries[2].Element); + Assert.Equal("Banana", queryEntries[3].Element); + Assert.Equal("color", queryEntries[4].Element); + + queryEntries = redisSortedSetStudy.SortedSetRangeByScoreWithScores(defaultRedisKey, 5, 7, Exclude.None, Order.Descending); + Assert.Equal(3, queryEntries.Length); + Assert.Equal("remove", queryEntries[0].Element); + Assert.Equal("query", queryEntries[1].Element); + Assert.Equal("color", queryEntries[2].Element); + + queryEntries = redisSortedSetStudy.SortedSetRangeByScoreWithScores(defaultRedisKey, double.NegativeInfinity, double.PositiveInfinity); + Assert.Equal(12, queryEntries.Length); + Assert.Equal("Andy", queryEntries[0].Element); + Assert.Equal("刘山东", queryEntries[11].Element); + } + #endregion + + #region SortedSetRangeByValue + + [Fact] + public void SortedSetRangeByValue_NotKey_Test() + { + var mumbers = redisSortedSetStudy.SortedSetRangeByValue(defaultRedisKey, 0, -1); + + Assert.Empty(mumbers); + } + + /// + /// 排它性参数Exclude设置 测试 + /// + [Fact] + public void SortedSetRangeByValue_Exclude_Test() + { + SortedSetEntry[] sortedSetEntries = new SortedSetEntry[] + { + new SortedSetEntry("first",0), + new SortedSetEntry("second",0), + new SortedSetEntry("third",0), + new SortedSetEntry("four",0), + new SortedSetEntry("five",0), + }; + redisSortedSetStudy.SortedSetAdd(defaultRedisKey, sortedSetEntries); + + //默认:Exclude.None [Start,Stop] + var members = redisSortedSetStudy.SortedSetRangeByValue(defaultRedisKey, "first", "second", Exclude.None); + //firt five four second + Assert.Equal(4, members.Length); + + //Exclude.Start (Start,Stop] + members = redisSortedSetStudy.SortedSetRangeByValue(defaultRedisKey, "first", "second", Exclude.Start); + //five four second + Assert.Equal(3, members.Length); + + //Exclude.Stop [Start,Stop) + members = redisSortedSetStudy.SortedSetRangeByValue(defaultRedisKey, "first", "four", Exclude.Stop); + Assert.Equal(2, members.Length); + + //Exclude.Both (Start,Stop) + members = redisSortedSetStudy.SortedSetRangeByValue(defaultRedisKey, "first", "four", Exclude.Both); + Assert.Single(members); + } + + /// + /// 分数相同,字典排序,逐字符比较(汉字的比较等待确认) + /// 字典顺序(”0”<…<”9”<”A”<…<”Z”<”a”<…<”z”) + /// + [Fact] + public void SortedSetRangeByValueTest() + { + SortedSetEntry[] sortedSetEntries = new SortedSetEntry[] + { + new SortedSetEntry("Andy",0), + new SortedSetEntry("and",0), + new SortedSetEntry("And",0), + new SortedSetEntry("Banana",0), + new SortedSetEntry("color",0), + new SortedSetEntry("query",0), + new SortedSetEntry("remove",0), + new SortedSetEntry("101",0), + new SortedSetEntry("304",0), + new SortedSetEntry("404",0), + new SortedSetEntry("王高峰",0), + new SortedSetEntry("刘山东",0), + }; + redisSortedSetStudy.SortedSetAdd(defaultRedisKey, sortedSetEntries); + + //数字排序 + var members = redisSortedSetStudy.SortedSetRangeByValue(defaultRedisKey, "0", "5"); + Assert.Contains("101", members); + Assert.Contains("304", members); + Assert.Contains("404", members); + + members = redisSortedSetStudy.SortedSetRangeByValue(defaultRedisKey, "10", "4"); + Assert.Contains("101", members); + Assert.Contains("304", members); + + members = redisSortedSetStudy.SortedSetRangeByValue(defaultRedisKey, "11", "40"); + Assert.Contains("304", members); + + //字母排序 + members = redisSortedSetStudy.SortedSetRangeByValue(defaultRedisKey, "And", "color"); + //And Andy Banana and color + Assert.Contains("And", members); + Assert.Contains("Andy", members); + Assert.Contains("Banana", members); + Assert.Contains("and", members); + Assert.Contains("color", members); + + members = redisSortedSetStudy.SortedSetRangeByValue(defaultRedisKey, "A", "color"); + //And Andy Banana and color + Assert.Contains("And", members); + Assert.Contains("Andy", members); + Assert.Contains("Banana", members); + Assert.Contains("and", members); + Assert.Contains("color", members); + + members = redisSortedSetStudy.SortedSetRangeByValue(defaultRedisKey, "A", "B"); + //And Andy 不包括Banana,因为Ba排在B后 + Assert.Contains("And", members); + Assert.Contains("Andy", members); + + members = redisSortedSetStudy.SortedSetRangeByValue(defaultRedisKey, "A", "Bb"); + //And Andy Banana + Assert.Contains("And", members); + Assert.Contains("Andy", members); + Assert.Contains("Banana", members); + + //TODO:汉字排序规则不清楚 + members = redisSortedSetStudy.SortedSetRangeByValue(defaultRedisKey, "王", "赵"); + //王高峰 + Assert.Contains("王高峰", members); + } + + /// + /// 分页测试 + /// + [Fact] + public void SortedSetRangeByValue_Page_Test() + { + SortedSetEntry[] sortedSetEntries = new SortedSetEntry[] + { + new SortedSetEntry("Andy",0), + new SortedSetEntry("and",0), + new SortedSetEntry("And",0), + new SortedSetEntry("Banana",0), + new SortedSetEntry("color",0), + new SortedSetEntry("query",0), + new SortedSetEntry("remove",0), + new SortedSetEntry("101",0), + new SortedSetEntry("304",0), + new SortedSetEntry("404",0), + new SortedSetEntry("王高峰",0), + new SortedSetEntry("刘山东",0), + }; + redisSortedSetStudy.SortedSetAdd(defaultRedisKey, sortedSetEntries); + + //第一页 + var members = redisSortedSetStudy.SortedSetRangeByValue(defaultRedisKey, "101", "remove", Exclude.None, 0, 4, CommandFlags.None); + Assert.Equal(4, members.Length); + Assert.Contains("101", members); + Assert.Contains("304", members); + Assert.Contains("404", members); + Assert.Contains("And", members); + + //第2页 + members = redisSortedSetStudy.SortedSetRangeByValue(defaultRedisKey, "101", "remove", Exclude.None, 4, 4, CommandFlags.None); + Assert.Equal(4, members.Length); + Assert.Contains("Andy", members); + Assert.Contains("Banana", members); + Assert.Contains("and", members); + Assert.Contains("color", members); + + //第3页 + members = redisSortedSetStudy.SortedSetRangeByValue(defaultRedisKey, "101", "remove", Exclude.None, 8, 4, CommandFlags.None); + Assert.Equal(2, members.Length); + Assert.Contains("query", members); + Assert.Contains("remove", members); + } + #endregion + + + #region 清理 public void Dispose() {