using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using RedisStudyModel; using StackExchange.Redis; namespace RedisStuy { /// /// 有序集合操作 /// public class RedisSortSetStudy { #region 初始化 private IDatabase redisDatabase = RedisHelper.GetRedisDatabase(); #endregion /// /// 将一个 member 元素及其 score 值加入到有序集 key 当中 /// 如果这个 member 已经是有序集的成员,那么更新这个 member 的 score 值, /// 并通过重新插入这个 member 元素,来保证该 member 在正确的位置上。 /// public bool SortedSetAdd(RedisKey key, RedisValue member, double score,CommandFlags flags=CommandFlags.None) { return redisDatabase.SortedSetAdd(key, member, score, flags); } /// /// 将一个 member 元素及其 score 值加入到有序集 key 当中 /// 如果这个 member 已经是有序集的成员,那么更新这个 member 的 score 值, /// 并通过重新插入这个 member 元素,来保证该 member 在正确的位置上。 /// public bool SortedSetAdd(RedisKey key, RedisValue member, double score, When when = When.Always, CommandFlags flags = CommandFlags.None) { return redisDatabase.SortedSetAdd(key, member, score, when, flags); } /// /// 将一组 SortedSetEntry 加入到有序集 key 当中 /// 如果某个 SortedSetEntry 已经是有序集的成员,那么更新这个 member 的 score 值, /// 并通过重新插入这个 member 元素,来保证该 member 在正确的位置上。 /// public long SortedSetAdd(RedisKey key, SortedSetEntry[] values, CommandFlags flags) { return redisDatabase.SortedSetAdd(key, values,flags); } /// /// 将一组 SortedSetEntry 加入到有序集 key 当中 /// 如果某个 SortedSetEntry 已经是有序集的成员,那么更新这个 member 的 score 值, /// 并通过重新插入这个 member 元素,来保证该 member 在正确的位置上。 /// public long SortedSetAdd(RedisKey key, SortedSetEntry[] values, When when = When.Always, CommandFlags flags = CommandFlags.None) { return redisDatabase.SortedSetAdd(key, values,when, flags); } /// /// 计算两个排序集合的集合操作,并将结果存储在目的地中,可选地执行特定聚合(默认为求和) /// public long SortedSetCombineAndStore(SetOperation operation, RedisKey destination, RedisKey first, RedisKey second, Aggregate aggregate = Aggregate.Sum, CommandFlags flags = CommandFlags.None) { return redisDatabase.SortedSetCombineAndStore(operation, destination, first, second, aggregate, flags); } /// /// 计算多个排序集(可选地使用每个集合权重)的集合操作,并将结果存储在目的地中,可选地执行特定聚合(默认为和)。 /// public long SortedSetCombineAndStore(SetOperation operation, RedisKey destination, RedisKey[] keys, double[] weights = null, Aggregate aggregate = Aggregate.Sum, CommandFlags flags = CommandFlags.None) { return redisDatabase.SortedSetCombineAndStore(operation, destination, keys, weights,aggregate,flags); } /// /// 通过递减来减少存储在键中的排序集合中成员的分数。 /// 如果成员不存在于排序的集合中,则以减量添加作为其得分(如其先前得分为0) /// public double SortedSetDecrement(RedisKey key, RedisValue member, double value, CommandFlags flags = CommandFlags.None) { return redisDatabase.SortedSetDecrement(key, member, value, flags); } /// /// 按增量存储按键存储的排序集合中成员的分数。 /// 如果成员不存在于排序的集合中,则以增量作为其得分添加(如其先前的得分为0.0) /// public double SortedSetIncrement(RedisKey key, RedisValue member, double value, CommandFlags flags = CommandFlags.None) { return redisDatabase.SortedSetIncrement(key, member, value, flags); } /// /// 获取指定条件的元素个数 /// /// 键 /// 最小值 /// 最大值 /// 在执行范围查询时,默认情况下,Start/Stop 限制是包含的;但是,两者也可以单独指定为排他性的。 /// 命令参数 /// /// 指定条件的元素个数 /// public long SortedSetLength(RedisKey key, double min = double.NegativeInfinity, double max = double.PositiveInfinity, Exclude exclude = Exclude.None, CommandFlags flags = CommandFlags.None) { return redisDatabase.SortedSetLength(key, min, max, exclude, flags); } /// /// 当排序的集合中的所有元素都以相同的分数插入时,为了强制词典编排,该命令返回在排序的集合中的元素的数量,其中的值为min和max之间的值。 /// public long SortedSetLengthByValue(RedisKey key, RedisValue min, RedisValue max, Exclude exclude = Exclude.None, CommandFlags flags = CommandFlags.None) { return redisDatabase.SortedSetLengthByValue(key, min, max, exclude, flags); } /// /// 通过分数返回有序集合指定区间内的成员 /// 有序集成员按分数值递增(从小到大)次序排列。 /// 具有相同分数值的成员按字典序来排列(该属性是有序集提供的,不需要额外的计算)。 /// 默认情况下,区间的取值使用闭区间(小于等于或大于等于),你也可以通过给参数前增加(符号来使用可选的开区间 (小于或大于)。 /// public RedisValue[] SortedSetRangeByRank(RedisKey key, long start = 0, long stop = -1, Order order = Order.Ascending, CommandFlags flags = CommandFlags.None) { return redisDatabase.SortedSetRangeByRank(key, start, stop, order, flags); } /// /// 同SortedSetRangeByRank, 只是返回值更详细 /// public SortedSetEntry[] SortedSetRangeByRankWithScores(RedisKey key, long start = 0, long stop = -1, Order order = Order.Ascending, CommandFlags flags = CommandFlags.None) { return redisDatabase.SortedSetRangeByRankWithScores(key, start, stop, order, flags); } /// /// 通过分数返回有序集合指定区间内的成员 /// public RedisValue[] SortedSetRangeByScore(RedisKey key, double start = double.NegativeInfinity, double stop = double.PositiveInfinity, Exclude exclude = Exclude.None, Order order = Order.Ascending, long skip = 0, long take = -1, CommandFlags flags = CommandFlags.None) { return redisDatabase.SortedSetRangeByScore(key, start, stop, exclude, order, skip, take, flags); } /// /// 同SortedSetRangeByScore,返回值为SortedSetEntry[] /// public SortedSetEntry[] SortedSetRangeByScoreWithScores(RedisKey key, double start = double.NegativeInfinity, double stop = double.PositiveInfinity, Exclude exclude = Exclude.None, Order order = Order.Ascending, long skip = 0, long take = -1, CommandFlags flags = CommandFlags.None) { return redisDatabase.SortedSetRangeByScoreWithScores(key, start, stop, exclude, order, skip, take, flags); } /// /// 通过字典区间返回有序集合的成 /// public RedisValue[] SortedSetRangeByValue(RedisKey key, RedisValue min = default(RedisValue), RedisValue max = default(RedisValue), Exclude exclude = Exclude.None, long skip = 0, long take = -1, CommandFlags flags = CommandFlags.None) { return redisDatabase.SortedSetRangeByValue(key, min, max, exclude, skip, take, flags); } /// /// 返回有序集合中指定成员的索引 /// public long? SortedSetRank(RedisKey key, RedisValue member, Order order = Order.Ascending, CommandFlags flags = CommandFlags.None) { return redisDatabase.SortedSetRank(key, member, order, flags); } /// /// 移除有序集合中的一个成员 /// public bool SortedSetRemove(RedisKey key, RedisValue member, CommandFlags flags = CommandFlags.None) { return redisDatabase.SortedSetRemove(key, member, flags); } /// /// 移除有序集合中的多个成员 /// public long SortedSetRemove(RedisKey key, RedisValue[] members, CommandFlags flags = CommandFlags.None) { return redisDatabase.SortedSetRemove(key, members, flags); } /// /// 移除有序集合中给定的排名区间的所有成员 /// public long SortedSetRemoveRangeByRank(RedisKey key, long start, long stop, CommandFlags flags = CommandFlags.None) { return redisDatabase.SortedSetRemoveRangeByRank(key, start, stop, flags); } /// /// 移除有序集合中给定的分数区间的所有成员 /// public long SortedSetRemoveRangeByScore(RedisKey key, double start, double stop, Exclude exclude = Exclude.None, CommandFlags flags = CommandFlags.None) { return redisDatabase.SortedSetRemoveRangeByScore(key, start, stop, exclude, flags); } /// /// 移除有序集合中给定的字典区间的所有成员 /// public long SortedSetRemoveRangeByValue(RedisKey key, RedisValue min, RedisValue max, Exclude exclude = Exclude.None, CommandFlags flags = CommandFlags.None) { return redisDatabase.SortedSetRemoveRangeByValue(key, min ,max ,exclude, flags); } /// /// 迭代有序集合中的元素(包括元素成员和元素分值) /// public IEnumerable SortedSetScan(RedisKey key, RedisValue pattern, int pageSize, CommandFlags flags) { return redisDatabase.SortedSetScan(key, pattern, pageSize, flags); } /// /// 迭代有序集合中的元素(包括元素成员和元素分值) /// public IEnumerable SortedSetScan(RedisKey key, RedisValue pattern = default(RedisValue), int pageSize = 10, long cursor = 0, int pageOffset = 0, CommandFlags flags = CommandFlags.None) { return redisDatabase.SortedSetScan(key, pattern, pageSize, cursor, pageOffset, flags); } /// /// 返回有序集中,成员的分数值 /// public double? SortedSetScore(RedisKey key, RedisValue member, CommandFlags flags = CommandFlags.None) { return redisDatabase.SortedSetScore(key, member, flags); } } }