zoukankan      html  css  js  c++  java
  • Redis系列(一)StackExchange.Redis的使用

    Redis系列(一)StackExchange.Redis的使用

    一、DLL安装

        用NuGet搜索StackExchange.Redis,然后下载就可以。
        ConnectionMultiplexer对象是StackExchange.Redis最中枢的对象。这个类的实例需要被整个应用程序域共享和重用的,不要在每个操作中不停的创建该对象的实例,所以使用单例来创建和存放这个对象。
        代码:

    private static ConfigurationOptions configurationOptions = ConfigurationOptions.Parse("127.0.0.1" + ":" + "6379");
            private static readonly object Locker = new object(); 
         private static ConnectionMultiplexer redisConn;
           
            /// <summary>
            /// 单例获取
            /// </summary>
            public static ConnectionMultiplexer RedisConn
            {
                get
                {
                    if (redisConn == null)
                    {
                        lock (Locker)
                        {
                            if (redisConn == null || !redisConn.IsConnected)
                            {
                                redisConn = ConnectionMultiplexer.Connect(configurationOptions);
                            }
                        }
                    }
                    return redisConn;
                }
            }
    

        

    IDatabase db = redis.GetDatabase();
    

      这里的GetDatabase() 返回的db对象是很轻量级别的,不需要被缓存起来,每次用每次取即可。IDatabase 的所有方法都有同步和异步的实现。其中的异步实现都是可以await的。

    二、Strings的相关方法

        具体代码:   

    var db = conn.GetDatabase();
           #region Strings命令
           string key = "keyTest1";
           //SET命令
           db.StringSet(key, "10");
           //GET命令
           string value = db.StringGet(key);
           Console.WriteLine(value);
           //APPEND命令
           db.StringAppend(key, "10");
           value = db.StringGet(key);
           Console.WriteLine(value);
           //有第二个参数(整数,参看StringIncrement方法)为DECRBY命令
           //没有第二个参数为DECR命令
           db.StringDecrement(key);
           value = db.StringGet(key);
           Console.WriteLine(value);
           //有第二个参数为INCRBY命令
           //没有第二个参数为INCR命令
           db.StringIncrement(key, 2);
           value = db.StringGet(key);
           Console.WriteLine(value);
           string key2 = "keyTest";
           //SETEX命令,带过期时间
           db.StringSet(key2, "keyTest2", new TimeSpan(0, 0, 5));
           string value2 = db.StringGet(key2);
           Console.WriteLine(value2);
           Thread.Sleep(5 * 1000);
           //超过5s后,查不到该值
           value2 = db.StringGet(key2);
           Console.WriteLine("5s later:" + value2);
           //GETSET命令,读出原来的值,并附新值
           //下面两个是测试
           value = db.StringGetSet(key, "2000");
           Console.WriteLine(value);
           value = db.StringGet(key);
           Console.WriteLine(value);
           //MSET命令
           db.StringSet(new KeyValuePair<RedisKey, RedisValue>[] {
                       new KeyValuePair<RedisKey, RedisValue>("key1", "value1"),
                       new KeyValuePair<RedisKey, RedisValue>("key2", "value2"), });
           //MGET命令
           RedisValue[] values = db.StringGet(new RedisKey[] { "key1", "key2" });
           Console.WriteLine(values[0] + "&&" + values[1]);
           #endregion
    

      运行结果:

    三、Hashes的相关方法

    具体代码:

    var db = conn.GetDatabase();
           #region Hash命令
           string key = "mykey";
           //避免key重复
           db.KeyDelete(key);
           //HSET命令
           db.HashSet(key, "a", "1");
           //HGET命令
           string value = db.HashGet(key, "a");
           Console.WriteLine(value);
           //HMSET
           db.HashSet(key, new HashEntry[] { new HashEntry("b", "2"), new HashEntry("c", "3") });
           //HMGET
           HashEntry[] values = db.HashGetAll(key);
           Console.WriteLine(values[0].Name + "///" + values[0].Value);
           //HDEL
           db.HashDelete(key, "c");
           string valuec = db.HashGet(key, "c");
           Console.WriteLine("c:" + valuec);
           //HEXISTS
           Console.WriteLine(db.HashExists(key, "a"));
           #endregion
    

      运行结果:

    四、Lists的相关方法

    具体代码:

    var db = conn.GetDatabase();
          #region List命令
          string key = "mykey";
          db.KeyDelete(key);
          //LPUSH
          long index = db.ListLeftPush(key, "test");
          //LINDEX,index返回总的长度,index必须减一
          string value = db.ListGetByIndex(key, index - 1);
          Console.WriteLine(value);
          //LINSTER
          long index2 = db.ListInsertAfter(key, "test", "testright");
          string value2 = db.ListGetByIndex(key, index2 - 1);
          Console.WriteLine(value2);
          long index3 = db.ListInsertBefore(key, "test", "testleft");
          string value3 = db.ListGetByIndex(key, index - 1);
          //LRANGE
          RedisValue[] values = db.ListRange(key);
          Console.WriteLine("values:begin");
          values.ToList().ForEach((v) =>
          {
              Console.WriteLine(v);
          });
          Console.WriteLine("values:end");
          //LREM
          long index4 = db.ListRemove(key, "test");
          values = db.ListRange(key);
          Console.WriteLine("values2:begin");
          values.ToList().ForEach((v) =>
          {
              Console.WriteLine(v);
          });
          Console.WriteLine("values2:end");
          //LPOP
          string value5 = db.ListLeftPop(key);
          Console.WriteLine(value5);
          values = db.ListRange(key);
          Console.WriteLine("values3:begin");
          values.ToList().ForEach((v) =>
          {
              Console.WriteLine(v);
          });
          Console.WriteLine("values3:end");
          Console.WriteLine(value3);
          #endregion
    

      运行结果:

    五、最后

    现在只简单学会使用Strings、Hashes和Lists,还有很多以后再研究使用。

    备注:

      文章系转载:http://www.cnblogs.com/weixiao520/p/5765358.html

  • 相关阅读:
    JavaScript中的闭包
    SQL 备忘
    SqlServer 2005 升级至SP2过程中出现"身份验证"无法通过的问题
    unable to start debugging on the web server iis does not list an application that matches the launched url
    Freebsd 编译内核
    Freebsd 6.2中关于无线网络的设定
    【Oracle】ORA01219
    【Linux】Windows到Linux的文件复制
    【Web】jar命令行生成jar包
    【Linux】CIFS挂载Windows共享
  • 原文地址:https://www.cnblogs.com/sunice/p/6605031.html
Copyright © 2011-2022 走看看