using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using StackExchange.Redis; namespace RedisStuy { /// /// 链表学习 /// http://www.redis.cn /// http://www.redis.net.cn/order/ /// public class RedisListStudy { #region 初始化 private IDatabase redisDatabase; public RedisListStudy() { redisDatabase = RedisHelper.GetRedisDatabase(); } #endregion /// /// 在列表的元素前(左)插入元素 /// /// /// 命令执行成功,返回插入操作完成之后,列表的长度 /// 没有找到指定元素 ,返回 -1 /// key 不存在或为空列表,返回 0 /// public long ListLeftPush(RedisKey key, RedisValue value, When when = When.Always, CommandFlags flags = CommandFlags.None) { return redisDatabase.ListLeftPush(key, value, when, flags); } /// /// 在列表的元素前(左)插入一组元素 /// /// /// 命令执行成功,返回插入操作完成之后,列表的长度 /// 没有找到指定元素 ,返回 -1 /// key 不存在或为空列表,返回 0 /// public long ListLeftPush(RedisKey key, RedisValue[] values, CommandFlags flags = CommandFlags.None) { return redisDatabase.ListLeftPush(key, values, flags); } /// /// 在列表的元素后(右)插入元素 /// /// /// 命令执行成功,返回插入操作完成之后,列表的长度 /// 没有找到指定元素 ,返回 -1 /// key 不存在或为空列表,返回 0 /// public long ListRightPush(RedisKey key, RedisValue value, When when = When.Always, CommandFlags flags = CommandFlags.None) { return redisDatabase.ListRightPush(key, value, when, flags); } /// /// 在列表的元素后面(右侧)插入一组元素 /// /// /// 命令执行成功,返回插入操作完成之后,列表的长度 /// 没有找到指定元素 ,返回 -1 /// key 不存在或为空列表,返回 0 /// public long ListRightPush(RedisKey key, RedisValue[] values, CommandFlags flags = CommandFlags.None) { return redisDatabase.ListRightPush(key, values, flags); } /// /// 在列表中指定元素后插入元素 /// 指定key不存在,不执行任何操作 /// /// /// 插入后,列表长度 /// 未找到指定key值时,返回 -1 /// public long ListInsertAfter(RedisKey key, RedisValue pivot, RedisValue value, CommandFlags flags = CommandFlags.None) { return redisDatabase.ListInsertAfter(key, pivot, value, flags); } /// /// 在列表中指定元素前插入元素 /// 指定key不存在,不执行任何操作 /// /// /// 插入后,列表长度 /// 未找到指定参照值时,返回 -1 /// public long ListInsertBefore(RedisKey key, RedisValue pivot, RedisValue value, CommandFlags flags = CommandFlags.None) { return redisDatabase.ListInsertBefore(key, pivot, value, flags); } /// /// 移出并获取列表的第一个元素 /// /// /// 列表的第一个元素 /// 当列表 key 不存在时,返回 nil /// public RedisValue ListLeftPop(RedisKey key, CommandFlags flags = CommandFlags.None) { return redisDatabase.ListLeftPop(key, flags); } /// /// 移除并返回列表的最后一个元素 /// /// /// 列表的最后一个元素 /// 当列表不存在时,返回 nil /// public RedisValue ListRightPop(RedisKey key, CommandFlags flags = CommandFlags.None) { return redisDatabase.ListRightPop(key, flags); } /// /// 获取列表长度 /// /// /// 列表的长度 /// 不存在时返回0 /// public long ListLength(RedisKey key, CommandFlags flags = CommandFlags.None) { return redisDatabase.ListLength(key, flags); } /// /// 获取列表指定范围内的元素 /// 0 表示列表的第一个元素, 1 表示列表的第二个元素,以此类推。 /// 负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推 /// /// /// 指定区间内元素列表 /// public RedisValue[] ListRange(RedisKey key, long start = 0, long stop = -1, CommandFlags flags = CommandFlags.None) { return redisDatabase.ListRange(key, start, stop, flags); } /// /// 根据参数 COUNT 的值,移除列表中与参数 VALUE 相等的元素 /// count 大于 0 从 头到尾 的移除值相等的元素 /// count 小于 0 从 尾到头 的移除值相等的元素 /// count 等于 0 移除所有与值相等的元素 /// public long ListRemove(RedisKey key, RedisValue value, long count = 0, CommandFlags flags = CommandFlags.None) { return redisDatabase.ListRemove(key, value, count, flags); } /// /// 通过索引获取列表中的元素 /// public RedisValue ListGetByIndex(RedisKey key, long index, CommandFlags flags=CommandFlags.None) { return redisDatabase.ListGetByIndex(key, index, flags); } /// /// 原子的,返回并移除源列表的最后一个元素(尾部),并将元素存储在目标列表的第一个元素(头)中 /// (原子的,把一个列表尾部的元素移动到另一个列表的头部) /// public RedisValue ListRightPopLeftPush(RedisKey source, RedisKey destination, CommandFlags flags = CommandFlags.None) { return redisDatabase.ListRightPopLeftPush(source, destination, flags); } /// /// 设置列表中指定索引的元素的值 /// public void ListSetByIndex(RedisKey key, long index, RedisValue value, CommandFlags flags = CommandFlags.None) { redisDatabase.ListSetByIndex(key, index, value, flags); } /// /// 修剪(trim)列表 /// 让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。 /// 索引从0开始,例如:LTrim(FooBar 0 2)将修改在FooBar列表,保留列表的前三个元素。 /// 索引为负数,表示从列表末尾的偏移,-1表示列表的最后一个元素,类推。 /// public void ListTrim(RedisKey key, long start, long stop, CommandFlags flags = CommandFlags.None) { redisDatabase.ListTrim(key, start, stop, flags); } } }