欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

c#使用csredis操作redis的示例

 更新時間:2020年12月01日 09:02:39   作者:小Y  
這篇文章主要介紹了c#使用csredis操作redis的示例,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下

現(xiàn)在流行的redis連接客戶端有StackExchange.Redis和ServiceStack.Redis,為什么選擇csredis而不是這兩個?

  • .net 最有名望的 ServiceStack.Redis 早已淪為商業(yè)用途,在 .NETCore 中使用只能充值;
  • 后來居上的 StackExchange.Redis 雖然能用,但線上各種 Timeout 錯誤把人坑到?jīng)]脾氣,兩年多兩年多兩年多都不解決,最近發(fā)布的 2.0 版本不知道是否徹底解決了底層。
  • csredis支持.net40/.net45/.netstandard2.0,基本上滿足了常見運行平臺,而上面兩個基本已經(jīng)放棄.net40了。
  • csredis所有方法名與redis-cli保持一持,很容易上手?。。?/li>

環(huán)境:

csredis 源碼地址: https://github.com/2881099/csredis

1.在.net項目中引入CSRedisCore

包安裝命令:

Install-Package CSRedisCore -Version 3.6.5

2.使用:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApp1
{
  class Program
  {
    static void Main(string[] args)
    {
      //根據(jù)連接信息構(gòu)造客戶端對象
      var redis = new CSRedis.CSRedisClient("192.168.3.42:6500,password=123456,defaultDatabase=0,poolsize=500,ssl=false,writeBuffer=10240,prefix=test_");
      //redis中的string存取
      redis.Set("name", "小明");
      var name= redis.Get("name");
      Console.WriteLine($"name={name}");

      redis.Set("birth", DateTime.Now);
      var birth = redis.Get<DateTime>("birth");
      Console.WriteLine($"birth={birth}");

      redis.Set("info", new {sex="female",age="20" });
      var info = redis.Get<object>("info");
      Console.WriteLine($"info={info}");

      Console.WriteLine("ok");
      Console.ReadLine();
    }
  }
}

3.高級玩法:發(fā)布訂閱

//普通訂閱
rds.Subscribe(
 ("chan1", msg => Console.WriteLine(msg.Body)),
 ("chan2", msg => Console.WriteLine(msg.Body)));

//模式訂閱(通配符)
rds.PSubscribe(new[] { "test*", "*test001", "test*002" }, msg => {
 Console.WriteLine($"PSUB  {msg.MessageId}:{msg.Body}  {msg.Pattern}: chan:{msg.Channel}");
});
//模式訂閱已經(jīng)解決的難題:
//1、分區(qū)的節(jié)點匹配規(guī)則,導(dǎo)致通配符最大可能匹配全部節(jié)點,所以全部節(jié)點都要訂閱
//2、本組 "test*", "*test001", "test*002" 訂閱全部節(jié)點時,需要解決同一條消息不可執(zhí)行多次

//發(fā)布
rds.Publish("chan1", "123123123");
//無論是分區(qū)或普通模式,rds.Publish 都可以正常通信

4.高級玩法:緩存殼

//不加緩存的時候,要從數(shù)據(jù)庫查詢
var t1 = Test.Select.WhereId(1).ToOne();

//一般的緩存代碼,如不封裝還挺繁瑣的
var cacheValue = rds.Get("test1");
if (!string.IsNullOrEmpty(cacheValue)) {
  try {
    return JsonConvert.DeserializeObject(cacheValue);
  } catch {
    //出錯時刪除key
    rds.Remove("test1");
    throw;
  }
}
var t1 = Test.Select.WhereId(1).ToOne();
rds.Set("test1", JsonConvert.SerializeObject(t1), 10); //緩存10秒

//使用緩存殼效果同上,以下示例使用 string 和 hash 緩存數(shù)據(jù)
var t1 = rds.CacheShell("test1", 10, () => Test.Select.WhereId(1).ToOne());
var t2 = rds.CacheShell("test", "1", 10, () => Test.Select.WhereId(1).ToOne());
var t3 = rds.CacheShell("test", new [] { "1", "2" }, 10, notCacheFields => new [] {
 ("1", Test.Select.WhereId(1).ToOne()),
 ("2", Test.Select.WhereId(2).ToOne())
});

5.高級玩法:管道

使用管道模式,打包多條命令一起執(zhí)行,從而提高性能。

var ret1 = rds.StartPipe().Set("a", "1").Get("a").EndPipe();
var ret2 = rds.StartPipe(p => p.Set("a", "1").Get("a"));

var ret3 = rds.StartPipe().Get("b").Get("a").Get("a").EndPipe();
//與 rds.MGet("b", "a", "a") 性能相比,經(jīng)測試差之毫厘

6.高級玩法:多數(shù)據(jù)庫

var connectionString = "127.0.0.1:6379,password=123,poolsize=10,ssl=false,writeBuffer=10240,prefix=key前輟";
var redis = new CSRedisClient[14]; //定義成單例
for (var a = 0; a< redis.Length; a++) redis[a] = new CSRedisClient(connectionString + "; defualtDatabase=" + a);

//訪問數(shù)據(jù)庫1的數(shù)據(jù)
redis[1].Get("test1");

7.性能比拼

以上就是c#使用csredis操作redis的示例的詳細(xì)內(nèi)容,更多關(guān)于c# csredis操作redis的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 詳解C#枚舉中使用Flags特性

    詳解C#枚舉中使用Flags特性

    這篇文章主要介紹了C#枚舉中使用Flags特性的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • C# DI依賴注入的實現(xiàn)示例

    C# DI依賴注入的實現(xiàn)示例

    依賴注入是一種實現(xiàn)的方法,用于減少代碼之間的耦合,本文主要介紹了C# DI依賴注入的實現(xiàn)示例,具有一定的參考價值,感興趣可以了解一下
    2023-12-12
  • C#使用LINQ中Enumerable類方法的延遲與立即執(zhí)行的控制

    C#使用LINQ中Enumerable類方法的延遲與立即執(zhí)行的控制

    這篇文章主要介紹了C#的LINQ查詢中Enumerable類方法的延遲與立即執(zhí)行,LINQ語言集成查詢可以讓C#和VB以查詢數(shù)據(jù)庫相同的方式操作內(nèi)存數(shù)據(jù),需要的朋友可以參考下
    2016-03-03
  • c#中的擴(kuò)展方法學(xué)習(xí)筆記

    c#中的擴(kuò)展方法學(xué)習(xí)筆記

    擴(kuò)展方法能夠向現(xiàn)有類型“添加”方法,而無需創(chuàng)建新的派生類型,重新編譯或以其他方式修改原始類型。下面這篇文章主要給大家介紹了關(guān)于c#中擴(kuò)展方法學(xué)習(xí)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2018-11-11
  • c#調(diào)整圖片分辨率的實現(xiàn)示例

    c#調(diào)整圖片分辨率的實現(xiàn)示例

    本文主要介紹了c#調(diào)整圖片分辨率的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-10-10
  • c# 圖片加密解密的實例代碼

    c# 圖片加密解密的實例代碼

    這篇文章介紹了c# 圖片加密解密的實例代碼,有需要的朋友可以參考一下
    2013-08-08
  • 再談異常處理try catch finally

    再談異常處理try catch finally

    這篇文章主要介紹了再談異常處理try catch finally 的相關(guān)資料,需要的朋友可以參考下
    2016-01-01
  • c#中使用BackgroundWorker的實現(xiàn)

    c#中使用BackgroundWorker的實現(xiàn)

    本文主要介紹了c#中使用BackgroundWorker的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • C#實現(xiàn)保存文件時重名自動生成新文件的方法

    C#實現(xiàn)保存文件時重名自動生成新文件的方法

    這篇文章主要介紹了C#實現(xiàn)保存文件時重名自動生成新文件的方法,涉及C#針對保存文件時出現(xiàn)重命名情況的自動處理技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • C#多線程系列之原子操作

    C#多線程系列之原子操作

    本文詳細(xì)講解了C#多線程的原子操作,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-02-02

最新評論