<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      .net 5.0 - 使用CSRedisCore操作redis

       為什么選擇CSRedisCore

       ServiceStack.Redis 是商業(yè)版,免費(fèi)版有限制;

       StackExchange.Redis 是免費(fèi)版,但是內(nèi)核在 .NETCore 運(yùn)行有問(wèn)題經(jīng)常 Timeout,暫無(wú)法解決;

       CSRedis于2016年開(kāi)始支持.NETCore一直迭代至今,實(shí)現(xiàn)了低門(mén)檻、高性能,和分區(qū)高級(jí)玩法的.NETCore redis-cli SDK;

       在v3.0版本更新中,CSRedis中的所有方法名稱(chēng)進(jìn)行了調(diào)整,使其和redis-cli保持一致,如果你熟悉redis-cli的命令的話(huà),CSRedis可以直接上手,這樣學(xué)習(xí)成本就降低很多。

       如何集成:引用和配置
      •  引用包
      CSRedisCore
      •  appsettings.json
      {
        //Redis服務(wù)配置
        "Redis": {
          "Default": {
            "Connection": "192.168.1.101:6379",
            "InstanceName": "local",
            "DefaultDB": 0
          }
        }
      }
       如何集成:redis 控制臺(tái) 引用方式
      •  初始化
      using CSRedis;
      
      namespace RedisCommon
      {
          public class RedisInit
          {
              public static void RedisInitialization()
              {
                  string connection = Appsettings.Instance.GetByKey("Redis:Default:Connection");
                  string defaultDB = Appsettings.Instance.GetByKey("Redis:Default:DefaultDB");
                  var csRedis = new CSRedisClient($"{connection},defaultDatabase={defaultDB},prefix=test");
                  RedisHelper.Initialization(csRedis);
              }
          }
      }
      

       

      static void Main(string[] args)
      {
          //初始化Redis
          RedisInit.RedisInitialization();    
      }
       如何集成:redis webapi 引用方式
      •  StartUp類(lèi)配置
      /// <summary>
      /// 初始化Redis緩存
      /// </summary>
      private void InitRedis()
      {
          //redis緩存
          var section = Configuration.GetSection("Redis:Default");
          //連接字符串
          string _connectionString = section.GetSection("Connection").Value;
          //默認(rèn)數(shù)據(jù)庫(kù) 
          int _defaultDB = int.Parse(section.GetSection("DefaultDB").Value ?? "0");
      
          var csredis = new CSRedis.CSRedisClient($"{_connectionString},defaultDatabase={_defaultDB},idleTimeout=3000,poolsize=5,prefix=GYG-API:KEY_");
          RedisHelper.Initialization(csredis);
      }
      

       鏈接字符串詳解

       127.0.0.1:6379,password=YourPassword,defaultDatabase=0,prefix=hr_

      Parameter   Default Explain  說(shuō)明 
       password  <Empty>  Redis server password  Redis服務(wù)器密碼
       defaultDatabase  0  Redis server database  Redis服務(wù)器數(shù)據(jù)庫(kù)
       asyncPipeline  false  The asynchronous method automatically uses pipeline, and the 10W concurrent time is 450ms (welcome to feedback)  異步方式自動(dòng)使用管道,10W并發(fā)時(shí)間450ms(歡迎反饋)
       poolsize  50  Connection pool size  連接池大小
       idleTimeout  20000  idle time of elements in the connection pool(MS),suitable for connecting to remote redis server   連接池中元素的空閑時(shí)間(MS),適合連接到遠(yuǎn)程redis服務(wù)器
       connectTimeout  5000  Connection timeout(MS)   連接超時(shí)(毫秒)
       syncTimeout  10000  Send / receive timeout(MS)   發(fā)送/接收超時(shí)(毫秒)
       preheat  5  Preheat connections, receive values such as preheat = 5 preheat 5 connections  預(yù)熱連接,接收值,例如Preheat=5 Preheat 5 connections
       autoDispose  true  Follow system exit event to release automatically   跟隨系統(tǒng)退出事件自動(dòng)釋放
       ssl  false  Enable encrypted transmission  啟用加密傳輸
       testcluster  true  是否嘗試集群模式,阿里云、騰訊云集群需要設(shè)置此選項(xiàng)為false  
       tryit  0  Execution error, retry  attempts  執(zhí)行錯(cuò)誤,重試次數(shù)
       name  <Empty>  Connection name, use client list command to view  連接名稱(chēng),使用client list命令查看
       prefix  <Empty>  key前綴,所有方法都會(huì)附帶此前綴,csredis.Set(prefix + "key", 111);  
       0、通用指令
      //查找所有分區(qū)節(jié)點(diǎn)中符合給定模式(pattern)的 key
      string[] keyAll = RedisHelper.Keys("*");
                  
      //以秒為單位,返回給定 key 的剩余生存時(shí)間
      long ttl1 = RedisHelper.Ttl("keyString1");
      
      //用于在 key 存在時(shí)刪除 key
      long del1 = RedisHelper.Del("keyString1");
      
      //檢查給定 key 是否存在
      bool isExists1 = RedisHelper.Exists("keyString1");
      
      //為給定 key 設(shè)置過(guò)期時(shí)間
      bool isExpire1 = RedisHelper.Expire("keyString1", 100);
      
      //為給定 key 設(shè)置過(guò)期時(shí)間
      RedisHelper.ExpireAt("keyString1", new DateTime(2021, 6, 11, 16, 0, 0));
       1、string(字符串)
      • 簡(jiǎn)單操作
      // 設(shè)置指定 key 值,默認(rèn)不過(guò)期
      bool set_string1 = RedisHelper.Set("keyString_String1", "測(cè)試值1");
      
      // 設(shè)置指定 key 值,并設(shè)置過(guò)期時(shí)間(單位:秒)
      bool set_string2 = RedisHelper.Set("keyString_String2", "測(cè)試值2", 1);
      
      // 獲取指定 key 的值,不存在的 key,值返回null
      string get_string1 = RedisHelper.Get("keyString_String1");
      
      // 獲取指定 key 的值,不存在的 key,或者指定的 key 不是int型,則返回int類(lèi)型的默認(rèn)值0
      int get_int1 = RedisHelper.Get<int>("keyString_String1");
      
      • 對(duì)整數(shù)類(lèi)型進(jìn)行自增,自減操作
      bool set_int1 = RedisHelper.Set("keyString_Num1", "23");
      
      // 將 key 所儲(chǔ)存的值加上指定的增量值(increment)
      long incrBy1 = RedisHelper.IncrBy("keyString_Num1", 2);// #25
      
      // 將 key 所儲(chǔ)存的值加上指定的增量值(increment),負(fù)數(shù)就是減量值
      long incrBy2 = RedisHelper.IncrBy("keyString_Num1", -1);// #24
      
      • 在指定 key 的 value 末尾追加字符串
      bool set_append1 = RedisHelper.Set("keyString_Append1", "qaz", 30);
      
      // 將指定的 value 追加到該 key 原來(lái)值(value)的末尾
      long append1 = RedisHelper.Append("keyString_Append1", "wsx");// #6 結(jié)果:key 中字符串的長(zhǎng)度
       2、hash(哈希)
      • #HSet、HGet、HDel方法 [只能處理一個(gè)鍵值對(duì)]
      // 將哈希表 key 中的字段 field 的值設(shè)為 value
      bool set_hash_user1_uname = RedisHelper.HSet("User:10001", "uname", "gongyg"); // 冒號(hào)的作用相當(dāng)于創(chuàng)建一個(gè)文件夾
      bool set_hash_user1_upwd = RedisHelper.HSet("User:10001", "upassword", "123456");
      bool set_hash_user1_uid = RedisHelper.HSet("User:10001", "uid", "12");
      
      // 獲取存儲(chǔ)在哈希表中指定字段的值
      string uName = RedisHelper.HGet("User:10001", "uname");
      
      // 獲取存儲(chǔ)在哈希表中指定字段的值,并指定類(lèi)型
      int uId = RedisHelper.HGet<int>("User:10001", "uid");
      
      // 刪除一個(gè)或多個(gè)哈希表字段,不能刪除key
      long hDel1 = RedisHelper.HDel("User:10001", "uname");
      
      • #HGetAll、HKeys、HVals
      // 獲取在哈希表中指定 key 的所有字段和值
      Dictionary<string, string> user10001 = RedisHelper.HGetAll("User:10001");
      foreach (var item in user10001)
      {
          string key = item.Key;
          string value = item.Value;
      }
      
      // 獲取所有哈希表中的字段 [雖然使用HGetAll可以取出所有的value,但是有時(shí)候散列包含的值可能非常大,容易造成服務(wù)器的堵塞,為了避免這種情況,我們可以使用HKeys取到散列的所有鍵(HVals可以取出所有值),然后再使用HGet方法一個(gè)一個(gè)地取出鍵對(duì)應(yīng)的值。]
      string[] fields = RedisHelper.HKeys("User:10001");
      foreach (string item in fields)
      {
          string val = RedisHelper.HGet("User:10001", item);
      }
      
      // 獲取哈希表中所有的值
      string[] vals = RedisHelper.HVals("User:10001");
      
      • #HMSet、HMGet [HGet和HSet方法執(zhí)行一次只能處理一個(gè)鍵值對(duì),而HMGet和HMSet是他們的多參數(shù)版本,一次可以處理多個(gè)鍵值對(duì)。]
      //var keyValues = dic.Select(a => new [] { a.Key, a.Value.ToString() }).SelectMany(a => a).ToArray();
      string[] user2 = new string[] { "uname", "gmd", "upwd", "123" };
      // 同時(shí)將多個(gè)field-value(域-值)對(duì)設(shè)置到哈希表 key 中
      bool set_hash_user2 = RedisHelper.HMSet("User:10002", user2);
      
      string[] user_get2 = new string[] { "uname", "upwd", "sj" };
      // 獲取存儲(chǔ)在哈希表中多個(gè)字段的值
      string[] user_val2 = RedisHelper.HMGet("User:10002", user_get2); // #gmd,123,
      
      • #對(duì)散列中的值進(jìn)行自增、自減操作
      bool set_hash_user1_usex = RedisHelper.HSet("User:10003", "uage", "23");
      
      // 為哈希表 key 中的指定字段和整數(shù)值加上增量(increment)自增(正數(shù)),自減(負(fù)數(shù))
      long hIncrBy = RedisHelper.HIncrBy("User:10001", "uage", 2);
       3、list(列表)
      // 將一個(gè)或多個(gè)值插入到列表頭部
      string[] lpush1 = new string[] { "003", "004" };
      long len1 = RedisHelper.LPush("list", "000");
      long len2 = RedisHelper.LPush("list", "001", "002");
      long len3 = RedisHelper.LPush("list", lpush1);
      
      // 在列表中添加一個(gè)或多個(gè)值 [列表尾部]
      long len4 = RedisHelper.RPush("list", "010");
      
      // 移除并獲取列表的第一個(gè)元素
      string val1 = RedisHelper.LPop("list");
      
      // 移除并獲取列表的最后一個(gè)元素
      string val2 = RedisHelper.RPop("list");
      
      // 獲取列表指定范圍內(nèi)的元素[key, start, stop]
      string[] lrang1 = RedisHelper.LRange("list", 0, 2); // #左側(cè)開(kāi)始,獲取前3個(gè)元素
      string[] lrang2 = RedisHelper.LRange("list", 0, -1); // #左側(cè)開(kāi)始,獲取全部元素
      
      // 將 list 最后一個(gè)元素彈出并壓入 list_another 的頭部 [只有一個(gè)元素的改變,源列表會(huì)少一個(gè)元素,目標(biāo)列表多出一個(gè)元素]
      RedisHelper.RPopLPush("list", "list_another");
      RedisHelper.Expire("list_another", 30);
       4、set(無(wú)序集合)
      • #對(duì)集合中的成員進(jìn)行操作
      // 向集合添加一個(gè)或多個(gè)成員 [返回添加成功個(gè)數(shù)]
      long sadd1 = RedisHelper.SAdd("my_set", "qaz");
      long sadd2 = RedisHelper.SAdd("my_set", "tgb", "yhn");
      string[] set1 = new string[] { "wsx", "edc" , "rfv" };
      long sadd3 = RedisHelper.SAdd("my_set", set1);
      
      // 判斷 member 元素是否是集合 key 的成員
      bool isMember = RedisHelper.SIsMember("my_set", "qaz");
      
      // 返回集合中的所有成員
      string[] members = RedisHelper.SMembers("my_set");
      
      // 返回集合中的一個(gè)隨機(jī)成員
      string member1 = RedisHelper.SRandMember("my_set");
      
      // 移除集合中一個(gè)或多個(gè)成員
      long sRem = RedisHelper.SRem("my_set", "qaz");
      
      // 移除并返回集合中一個(gè)隨機(jī)成員
      string member2 = RedisHelper.SPop("my_set");
      
      • #對(duì)兩個(gè)集合進(jìn)行交、并、差操作
      RedisHelper.SAdd("set-a", "item1", "item2", "item3", "item4", "item5");
      RedisHelper.SAdd("set-b", "item2", "item5", "item6", "item7");
      
      // 差集
      RedisHelper.SDiff("set-a", "set-b"); // "item1", "item3","item4"
      
      // 交集
      RedisHelper.SInter("set-a", "set-b"); // "item2","item5"
      
      // 并集
      RedisHelper.SUnion("set-a", "set-b"); // "item1","item2","item3","item4","item5","item6","item7"
      
      //#另外還可以用SDiffStore,SInterStore,SUnionStore將操作后的結(jié)果存儲(chǔ)在新的集合中。
       5、zset(sorted set:有序集合)
      • 有序集合可以看作是可排序的散列,不過(guò)有序集合的val成為score分值,集合內(nèi)的元素就是基于score進(jìn)行排序的,score以雙精度浮點(diǎn)數(shù)的格式存儲(chǔ)。
      // 向有序集合添加一個(gè)或多個(gè)成員,或者更新已存在成員的分?jǐn)?shù)
      RedisHelper.ZAdd("sorted_set", (1, "beijing"));
      RedisHelper.ZAdd("sorted_set", (2, "shanghai"), (3, "shenzhen"));
      (decimal, object)[] set1 = new (decimal, object)[] { (4, "guangzhou"), (5, "tianjing"), (6, "chengdu") };
      RedisHelper.ZAdd("sorted_set", set1);
      
      // 有序集合中對(duì)指定成員的分?jǐn)?shù)加上增量 increment
      decimal incr = RedisHelper.ZIncrBy("sorted_set", "beijing", -2);
      
      // 通過(guò)索引區(qū)間返回有序集合成指定區(qū)域內(nèi)的成員,分?jǐn)?shù)從低到高 [key, start, stop] 
      string[] zRange1 = RedisHelper.ZRange("sorted_set", 0, 2);
      string[] zRange2 = RedisHelper.ZRange("sorted_set", 0, -1); // #stop=-1返回全部
      
      // 返回有序集合中指定區(qū)域內(nèi)的成員,通過(guò)索引,分?jǐn)?shù)從高到底 [key, start, stop]
      string[] zRevRange1 = RedisHelper.ZRevRange("sorted_set", 0 , 2);
      string[] zRevRange2 = RedisHelper.ZRevRange("sorted_set", 0, -1); // #stop=-1返回全部
      
      // 移除有序集合中一個(gè)或多個(gè)成員
      RedisHelper.ZRem("sorted_set", "shenzhen");
      
      // 獲取有序集合的成員數(shù)量
      long number = RedisHelper.ZCard("sorted_set");
      
      // 通過(guò)分?jǐn)?shù)返回有序集合指定區(qū)間內(nèi)的成員
      string[] ZRangByScore1 = RedisHelper.ZRangeByScore("sorted_set", 2, 4);
      
      // 通過(guò)索引區(qū)間返回有序集合成指定區(qū)間內(nèi)的成員和分?jǐn)?shù)
      (string member, decimal score)[] sets = RedisHelper.ZRangeWithScores("Quiz", 0, -1);
       6、Geo(經(jīng)緯度)
      //1. 添加地點(diǎn)經(jīng)緯度 [存儲(chǔ)到 sorted set 中]
      RedisHelper.GeoAdd("myLocation", Convert.ToDecimal(116.20), Convert.ToDecimal(39.56), "北京");
      RedisHelper.GeoAdd("myLocation", Convert.ToDecimal(120.51), Convert.ToDecimal(30.40), "上海");
      
      //2. 求兩點(diǎn)之間的距離
      var d1 = RedisHelper.GeoDist("myLocation", "北京", "上海", GeoUnit.km);
       7、事務(wù)
      // 開(kāi)啟事務(wù)
      var pipe = RedisHelper.StartPipe();
      
      //中間對(duì)redis進(jìn)行操作
      pipe.Set("pipe1", "wsx");
      
      // 提交
      pipe.EndPipe();

       

      posted @ 2021-06-10 17:33  gygtech  Views(6363)  Comments(0)    收藏  舉報(bào)
      主站蜘蛛池模板: 精品国产福利一区二区| 亚洲熟妇丰满多毛xxxx| 国产福利微视频一区二区| 久久天天躁夜夜躁狠狠85| 丰满人妻熟妇乱精品视频| 图片区偷拍区小说区五月 | 国产口爆吞精在线视频2020版| 国产精品美女一区二三区| 国产精品久久久久影院色| 国内精品久久久久久久97牛牛| 亚洲精品日韩在线观看| 久久夜色国产噜噜亚洲av| 久久精品国产99久久6| 国产欧美久久一区二区| 国内视频偷拍一区,二区,三区| 国产95在线 | 欧美| 丰满老熟妇好大bbbbb| 亚洲av一本二本三本| 亚洲人成人网站色www| 亚洲高清免费在线观看| 日日碰狠狠添天天爽五月婷| 欧美老熟妇喷水| 久久精品国产99亚洲精品| 久在线精品视频线观看| 日韩内射美女人妻一区二区三区| 国产一区二区三区黄色片| 精品久久久久无码| 亚洲高清WWW色好看美女| 男女性高爱潮免费网站| 少妇爽到呻吟的视频| 插插射啊爱视频日a级| 中国孕妇变态孕交xxxx| 亚洲av成人精品免费看| 日韩丝袜欧美人妻制服| 欧乱色国产精品兔费视频| 免费无遮挡无码视频网站| 久热伊人精品国产中文| 日韩精品一区二区高清视频| 色欲久久久天天天综合网精品| 乱女乱妇熟女熟妇综合网| 国产亚洲国产精品二区|