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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM