zoukankan      html  css  js  c++  java
  • Redis学习笔记(3) List类型值存取

    List链表的实现为一个双线链表,支持栈和队列的实现,同时也支持反向查询。是Redis比较常用的数据结构。 List链表支持泛型,结构如List<T>,本例子比较简单,List链表存储的String类型。

    List类型存储实现(主要实现队列和栈存取)

    新建为RedisDemo 控制台项目,通过Nuget添加servicestack.redis引用。新建RedisClientList的类,具体代码如下:

      

        /// <summary>
        /// Redis链表操作
        /// </summary>
        public static class RedisClientList
        {
            #region Private Fields
            /// <summary>
            /// 实例化Redis客户端
            /// </summary>
            private static RedisClient redisClient = new RedisClient("127.0.0.1");
    
            /// <summary>
            /// 链表1 key名称
            /// </summary>
            public static string ListId = "rcl_testlist";
            /// <summary>
            /// 链表2 key名称
            /// </summary>
            public static string ListId2 = "rcl_testlist2";
            #endregion
    
            #region Public Methods
    
            #region Stack
            /// <summary>
            /// 从栈中获取第一项
            /// </summary>
            /// <param name="listId">主键</param>
            /// <returns>栈头部项</returns>
            public static string PopItemFromList(string listId)
            {
                return redisClient.PopItemFromList(listId);
            }
            /// <summary>
            /// 往栈中插入数据
            /// </summary>
            /// <param name="listId"></param>
            /// <param name="item"></param>
            public static void PushItemFromList(string listId, string item)
            {
                redisClient.PushItemToList(listId, item);
            }
    
            #endregion
            #region EnqueueItemOnList
    
            /// <summary>
            /// 往队列中加入值
            /// </summary>
            /// <param name="listId">主键</param>
            /// <param name="item"></param>
            public static void EnqueueItemOnList(string listId, string item)
            {
                redisClient.EnqueueItemOnList(listId, item);
            }
    
            /// <summary>
            /// 往队列中取出值数据
            /// </summary>
            /// <param name="listId">主键</param>
            /// <returns>第一个进入队列的项</returns>
            public static string DequeueItemFromList(string listId)
            {
                return redisClient.DequeueItemFromList(listId);
            }
    
            #endregion
    
    
            /// <summary>
            /// 链表中数据容量
            /// </summary>
            /// <param name="listId">主键</param>
            /// <returns></returns>
            public static int NameItemCount(string listId)
            {
                return redisClient.GetListCount(listId);
            }
    
    
            #endregion
        }

    RedisClient对List提供的方法本例中用得的有

    1、PopItemFromList:某个主键的栈中拉出最后进栈的数据值,先进后出原则。

    2、PushItemFromList:往某个主键的栈中压入数据值。

    3、DequeueItemFromList: 某个主键的队列中拉出最先进队列的数据值,先进先出原则。

    4、EnqueueItemOnList :某个主键的队列中压入数据值。

    测试代码如下:

      

        class Program
        {
            static void Main(string[] args)
            {
    
    
                Console.WriteLine("测试栈,是否遵循先进后出原则");
                Console.WriteLine("加入名字有\r\n张三");
                Console.WriteLine("李四");
                Console.WriteLine("王五");
                Console.WriteLine("赵六");
                //往栈加入数据
                RedisClientList.PushItemFromList(RedisClientList.ListId, "张三");
                RedisClientList.PushItemFromList(RedisClientList.ListId, "李四");
                RedisClientList.PushItemFromList(RedisClientList.ListId, "王五");
                RedisClientList.PushItemFromList(RedisClientList.ListId, "赵六");
    
    
                //往队列加入数据
                RedisClientList.EnqueueItemOnList(RedisClientList.ListId2, "张三");
                RedisClientList.EnqueueItemOnList(RedisClientList.ListId2, "李四");
                RedisClientList.EnqueueItemOnList(RedisClientList.ListId2, "王五");
                RedisClientList.EnqueueItemOnList(RedisClientList.ListId2, "赵六");
                //栈个数
                var stackItemCount = RedisClientList.NameItemCount(RedisClientList.ListId);
    
                //队列个数
                var enqueueItemCount = RedisClientList.NameItemCount(RedisClientList.ListId2);
                Console.WriteLine("栈结构输出");
                for (var i = 0; i < stackItemCount; i++)
                {
                    Console.WriteLine("名字:" + RedisClientList.PopItemFromList(RedisClientList.ListId));
                }
                Console.WriteLine("");
                Console.WriteLine("");
    
                Console.WriteLine("测试队列,是否遵循先进先出原则");
                Console.WriteLine("队列结构输出");
                for (var i = 0; i < enqueueItemCount; i++)
                {
                    Console.WriteLine("名字:" + RedisClientList.DequeueItemFromList(RedisClientList.ListId2));
                }
                Console.ReadLine();
            }
    
    
        }


    测试结果如下:

                           

     测试成功!

  • 相关阅读:
    自定义word快捷键,设置插入图片快捷键
    python使用ftplib做ftp操作
    各浏览器的userAgent对照表
    python判断字符串
    python判断字符串
    apache日志信息详解
    apache日志信息详解
    apache日志信息详解
    linux 下 读取某个文件的某一行或者某几行
    linux 下 读取某个文件的某一行或者某几行
  • 原文地址:https://www.cnblogs.com/chenchunyong/p/3030137.html
Copyright © 2011-2022 走看看