中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C# 怎么通過ServiceStack 操作Redis

發布時間:2021-03-15 10:50:37 來源:億速云 閱讀:1034 作者:TREX 欄目:開發技術

這篇文章主要介紹“C# 怎么通過ServiceStack 操作Redis”,在日常操作中,相信很多人在C# 怎么通過ServiceStack 操作Redis問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”C# 怎么通過ServiceStack 操作Redis”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

1.引用Nuget包 ServiceStack.Redis

我這里就用別人已經封裝好的Reids操作類來和大家一起參考了下,看看怎么使用ServiceStack.Redis 操作Redis數據

RedisConfigInfo--redis配置文件信息

 /// <summary>
 /// redis配置文件信息
 /// 也可以放到配置文件去
 /// </summary>
 public sealed class RedisConfigInfo
 {
  /// <summary>
  /// 可寫的Redis鏈接地址
  /// format:ip1,ip2
  /// 
  /// 默認6379端口
  /// </summary>
  public string WriteServerList = "127.0.0.1:6379";
  /// <summary>
  /// 可讀的Redis鏈接地址
  /// format:ip1,ip2
  /// </summary>
  public string ReadServerList = "127.0.0.1:6379";
  /// <summary>
  /// 最大寫鏈接數
  /// </summary>
  public int MaxWritePoolSize = 60;
  /// <summary>
  /// 最大讀鏈接數
  /// </summary>
  public int MaxReadPoolSize = 60;
  /// <summary>
  /// 本地緩存到期時間,單位:秒
  /// </summary>
  public int LocalCacheTime = 180;
  /// <summary>
  /// 自動重啟
  /// </summary>
  public bool AutoStart = true;
  /// <summary>
  /// 是否記錄日志,該設置僅用于排查redis運行時出現的問題,
  /// 如redis工作正常,請關閉該項
  /// </summary>
  public bool RecordeLog = false;
 }

RedisManager --Redis管理中心   創建Redis鏈接

 /// <summary>
 /// Redis管理中心 創建Redis鏈接
 /// </summary>
 public class RedisManager
 {
  /// <summary>
  /// redis配置文件信息
  /// </summary>
  private static RedisConfigInfo RedisConfigInfo = new RedisConfigInfo();

  /// <summary>
  /// Redis客戶端池化管理
  /// </summary>
  private static PooledRedisClientManager prcManager;

  /// <summary>
  /// 靜態構造方法,初始化鏈接池管理對象
  /// </summary>
  static RedisManager()
  {
   CreateManager();
  }

  /// <summary>
  /// 創建鏈接池管理對象
  /// </summary>
  private static void CreateManager()
  {
   string[] WriteServerConStr = RedisConfigInfo.WriteServerList.Split(',');
   string[] ReadServerConStr = RedisConfigInfo.ReadServerList.Split(',');
   prcManager = new PooledRedisClientManager(ReadServerConStr, WriteServerConStr,
        new RedisClientManagerConfig
        {
         MaxWritePoolSize = RedisConfigInfo.MaxWritePoolSize,
         MaxReadPoolSize = RedisConfigInfo.MaxReadPoolSize,
         AutoStart = RedisConfigInfo.AutoStart,
        });
  }

  /// <summary>
  /// 客戶端緩存操作對象
  /// </summary>
  public static IRedisClient GetClient()
  {
   return prcManager.GetClient();
  }
 }

RedisBase-- 是redis操作的基類,繼承自IDisposable接口,主要用于釋放內存

/// <summary>
 /// RedisBase類,是redis操作的基類,繼承自IDisposable接口,主要用于釋放內存
 /// </summary>
 public abstract class RedisBase : IDisposable
 {
  public IRedisClient iClient { get; private set; }
  /// <summary>
  /// 構造時完成鏈接的打開
  /// </summary>
  public RedisBase()
  { 
   iClient = RedisManager.GetClient();
  }

  //public static IRedisClient iClient { get; private set; }
  //static RedisBase()
  //{
  // iClient = RedisManager.GetClient();
  //}


  private bool _disposed = false;
  protected virtual void Dispose(bool disposing)
  {
   if (!this._disposed)
   {
    if (disposing)
    {
     iClient.Dispose();
     iClient = null;
    }
   }
   this._disposed = true;
  }
  public void Dispose()
  {
   Dispose(true);
   GC.SuppressFinalize(this);
  }

  public void Transcation()
  {
   using (IRedisTransaction irt = this.iClient.CreateTransaction())
   {
    try
    {
     irt.QueueCommand(r => r.Set("key", 20));
     irt.QueueCommand(r => r.Increment("key", 1));
     irt.Commit(); // 提交事務
    }
    catch (Exception ex)
    {
     irt.Rollback();
     throw ex;
    }
   }
  }


  /// <summary>
  /// 清除全部數據 請小心
  /// </summary>
  public virtual void FlushAll()
  {
   iClient.FlushAll();
  }

  /// <summary>
  /// 保存數據DB文件到硬盤
  /// </summary>
  public void Save()
  {
   iClient.Save();//阻塞式save
  }

  /// <summary>
  /// 異步保存數據DB文件到硬盤
  /// </summary>
  public void SaveAsync()
  {
   iClient.SaveAsync();//異步save
  }
 }

RedisStringService--String類型操作幫助類

 /// <summary>
 /// key-value 鍵值對:value可以是序列化的數據
 /// </summary>
 public class RedisStringService : RedisBase
 {
  #region 賦值
  /// <summary>
  /// 設置key的value
  /// </summary>
  public bool Set<T>(string key, T value)
  {
   //iClient.Db =2;
   return base.iClient.Set<T>(key, value);
  }
  /// <summary>
  /// 設置key的value并設置過期時間
  /// </summary>
  public bool Set<T>(string key, T value, DateTime dt)
  {
   //iClient.Db = 2;
   return base.iClient.Set<T>(key, value, dt);
  }
  /// <summary>
  /// 設置key的value并設置過期時間
  /// </summary>
  public bool Set<T>(string key, T value, TimeSpan sp)
  {
   //iClient.Db = 2;
   return base.iClient.Set<T>(key, value, sp);
  }
  /// <summary>
  /// 設置多個key/value 可以一次保存多個key value ---多個key value 不是分多次,是一個獨立的命令;
  /// </summary>
  public void Set(Dictionary<string, string> dic)
  {
   //iClient.Db = 2;
   base.iClient.SetAll(dic);
  }

  #endregion

  #region 追加
  /// <summary>
  /// 在原有key的value值之后追加value,沒有就新增一項
  /// </summary>
  public long Append(string key, string value)
  {
   return base.iClient.AppendToValue(key, value);
  }
  #endregion

  #region 獲取值
  /// <summary>
  /// 獲取key的value值
  /// </summary>
  public string Get(string key)
  {
   return base.iClient.GetValue(key);
  }
  /// <summary>
  /// 獲取多個key的value值
  /// </summary>
  public List<string> Get(List<string> keys)
  {
   return base.iClient.GetValues(keys);
  }
  /// <summary>
  /// 獲取多個key的value值
  /// </summary>
  public List<T> Get<T>(List<string> keys)
  {
   return base.iClient.GetValues<T>(keys);
  }
  #endregion

  #region 獲取舊值賦上新值
  /// <summary>
  /// 獲取舊值賦上新值
  /// </summary>
  public string GetAndSetValue(string key, string value)
  {
   return base.iClient.GetAndSetValue(key, value);
  }
  #endregion

  #region 輔助方法
  /// <summary>
  /// 獲取值的長度
  /// </summary>
  public long GetLength(string key)
  {
   return base.iClient.GetStringCount(key);
  }
  /// <summary>
  /// 自增1,返回自增后的值 保存的是10 調用后,+1 返回11
  /// </summary>
  public long Incr(string key)
  {
   return base.iClient.IncrementValue(key);
  }
  /// <summary>
  /// 自增count,返回自增后的值 自定義自增的步長值
  /// </summary>
  public long IncrBy(string key, int count)
  {
   return base.iClient.IncrementValueBy(key, count);
  }
  /// <summary>
  /// 自減1,返回自減后的值,Redis操作是單線程操作;不會出現超賣的情況
  /// </summary>
  public long Decr(string key)
  {
   return base.iClient.DecrementValue(key);
  }
  /// <summary>
  /// 自減count ,返回自減后的值
  /// </summary>
  /// <param name="key"></param>
  /// <param name="count"></param>
  /// <returns></returns>
  public long DecrBy(string key, int count)
  {
   return base.iClient.DecrementValueBy(key, count);
  }
  #endregion
 }

nuget包是外國人寫的,在國內并沒有完整的中文文檔,也沒有專門的人來翻譯、封裝它,所以上面的代碼方法不是很全,還有很多api方法需要自己去官網找然后自己封裝。

在這里,上面的封裝我就放一邊,還是給大家演示ServiceStack原生的API如何使用

2. string 類型的使用

C# 怎么通過ServiceStack 操作Redis

 public static RedisClient client = new RedisClient("127.0.0.1", 6379);

    //1.存入鍵值對
    bool a = client.Set("key_name", "value_11");
    //2. 根據key獲取值
    string data1= client.GetValue("key_name");
    //3. 在原有的value上進行追加
    long data2 = client.AppendToValue("key_name", "value_11");
    // 4.獲取值的長度
    var data3=client.GetStringCount("key_name");
    //5. 數值自增/減,返回自增、自減后的值
    client.Set("小明分數", 100);
    //自增20,可以自增負值
    var data4= client.IncrementValueBy("小明分數", 20);
    //自減50
    var data5 = client.DecrementValueBy("小明分數", 50);
    //6. 插入實體和讀取實體
    UserInfo userInfo = new UserInfo() { Id = 3, Age = 50, Name = "zxl", Pwd = "123456" };
    client.Set("UserInfo_Id_3", userInfo);   
    UserInfo data6 = client.Get<UserInfo>("UserInfo_Id_3");
    //7. 一次性添加多個key-value集合
    Dictionary<string, string> dic = new Dictionary<string, string>() {
     { "101", Guid.NewGuid().ToString("N")},
     { "102", Guid.NewGuid().ToString("N")},
     { "103", Guid.NewGuid().ToString("N")},
     { "104", Guid.NewGuid().ToString("N")},
     { "105", Guid.NewGuid().ToString("N")},
     { "106", Guid.NewGuid().ToString("N")}
    };    
    client.SetAll(dic);
    //8.獲取多個key的 value值集合
    List<string> keys = new List<string>(){ "101", "103", "105" };
    List<string> data8= client.GetValues(keys);

C# 怎么通過ServiceStack 操作Redis

C# 怎么通過ServiceStack 操作Redis

//9. 重命名key
    client.Rename("106", "1066");
    //10. 設置key的過期時間(30秒后自動銷毀)
    bool b2= client.Expire("102", 30);

    //11. 刪除單個key
    bool d1 = client.Remove("101");//刪除成功,返回true
    bool d2 = client.Remove("ffff"); //刪除不存在的數據,返回false

C# 怎么通過ServiceStack 操作Redis

//13.清除全部數據 請小心
client.FlushAll();

C# 怎么通過ServiceStack 操作Redis

到此,關于“C# 怎么通過ServiceStack 操作Redis”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

六安市| 额济纳旗| 池州市| 拉萨市| 永靖县| 栾城县| 错那县| 夹江县| 景德镇市| 海门市| 洛隆县| 靖安县| 克什克腾旗| 江油市| 承德市| 毕节市| 张家港市| 永仁县| 繁昌县| 阳山县| 武功县| 静安区| 界首市| 永春县| 海丰县| 娄底市| 宜章县| 安福县| 兰西县| 昔阳县| 罗城| 西充县| 尤溪县| 蓬莱市| 宿松县| 阿克苏市| 奉节县| 义乌市| 贵港市| 二连浩特市| 三台县|