給大家介紹6款.NET系Redis客戶端庫: ServiceStack.Redis、StackExchange.Redis、CSRedisCore、FreeRedis、NewLife.Redis、BeetleX.Redis。
01、ServiceStack.Redis
ServiceStack.Redis算的上最老牌、最有名的一款Redis C#/.NET客戶端庫了,但是因為商業(yè)性導致對于大多數(shù)人來說不是首選。
ServiceStack.Redis是一款功能豐富、操作簡單、高性能的C#/.NET客戶端庫,對原生的功能和特性提供很好的支持,同時又做了更高級的功能抽象,使得對簡單對象或復雜類型序列化操作更容易。當然也同時提供了同步和異步API。
下面我們寫個簡單的使用小例子:
public static void Run()
{
Console.WriteLine($"ServiceStack.Redis 使用示例");
//創(chuàng)建連接池
var pool = new RedisManagerPool("127.0.0.1:6379");
//獲取一個redis實例
using var redis = pool.GetClient();
//設置鍵值對
var setResult = redis.Set("key1", "value1");
Console.WriteLine($"設置鍵值對key1/value1操作結果:{setResult}");
//獲取鍵對應的值
var value = redis.Get<string>("key1");
Console.WriteLine($"獲取鍵key1對應的值為:{value}");
// 刪除鍵
var delResult = redis.Remove("key1");
Console.WriteLine($"刪除鍵key1操作結果:{delResult}");
//檢查鍵是否存在
var exists = redis.ContainsKey("key1");
Console.WriteLine($"鍵key1是否存在: {exists}");
}
執(zhí)行結果如下:
02、StackExchange.Redis
StackExchange.Redis是一款基于.NET的、高性能的、免費的、功能全面的、通用的老牌Redis客戶端。并且支持Redis多節(jié)點,Redis集群,IO多路復用,同步/異步雙編程模型等技術,這也使得其與Redis交互同時兼具靈活性與高效性,大大提升了Redis讀寫的性能與并發(fā)。
同時它還提供了豐富的高級功能,包括但不限于管道,連接池,事務,Lua腳本、訂閱/發(fā)布等。序列化與壓縮也提供了多種方式供以選擇,很方便與.NET應用程序集成。
下面我們寫個簡單的使用小例子:
public static void Run()
{
Console.WriteLine($"StackExchange.Redis 使用示例");
// 創(chuàng)建 ConnectionMultiplexer 實例
using var connection = ConnectionMultiplexer.Connect("127.0.0.1:6379");
//獲取 Redis 數(shù)據(jù)庫實例
var redis = connection.GetDatabase();
//設置鍵值對
var setResult = redis.StringSet("key1", "value1");
Console.WriteLine($"設置鍵值對key1/value1操作結果:{setResult}");
//獲取鍵對應的值
var value = redis.StringGet("key1");
Console.WriteLine($"獲取鍵key1對應的值為:{value}");
// 刪除鍵
var delResult = redis.KeyDelete("key1");
Console.WriteLine($"刪除鍵key1操作結果:{delResult}");
//檢查鍵是否存在
var exists = redis.KeyExists("key1");
Console.WriteLine($"鍵key1是否存在: {exists}");
}
執(zhí)行結果如下:
03、CSRedisCore
CSRedisCore是一款國人基于開源項目csredis上實現(xiàn)的著名Redis C#/.NET客戶端庫。它做到了所有方法名和redis-cli方法名保持一致。它支持Redis 集群、Redis 哨兵和Redis主從分離,以及geo類型、流類型命令,同時支持同步/異步接口。
下面我們寫個簡單的使用小例子:
public static void Run()
{
Console.WriteLine($"CSRedisRedis 使用示例");
// 創(chuàng)建 CSRedisClient 實例
var redis = new CSRedisClient("127.0.0.1:6379");
//設置鍵值對
var setResult = redis.Set("key1", "value1");
Console.WriteLine($"設置鍵值對key1/value1操作結果:{setResult}");
//獲取鍵對應的值
var value = redis.Get("key1");
Console.WriteLine($"獲取鍵key1對應的值為:{value}");
// 刪除鍵
var delResult = redis.Del("key1");
Console.WriteLine($"刪除鍵key1操作結果:{delResult}");
//檢查鍵是否存在
var exists = redis.Exists("key1");
Console.WriteLine($"鍵key1是否存在: {exists}");
}
執(zhí)行結果如下:
04、FreeRedis
FreeRedis是CSRedisCore作者的另一個大作。至少從邏輯上來說也應該比CSRedisCore更優(yōu)秀,事實也是如此,F(xiàn)reeRedis在內(nèi)存使用、存儲效率都做了優(yōu)化,在持久化、容錯方面也做了改進,同時還提供了更多的高級功能以及自定義選項。我們直接看官方介紹。
單從介紹上來說CSRedisCore有的功能它有,CSRedisCore沒有的功能它也有??偟膩碚f功能更強大了。另外CSRedisCore目前處于維護階段已經(jīng)不新增功能了。因此更推薦FreeRedis。
下面我們寫個簡單的使用小例子:
public static void Run()
{
Console.WriteLine($"FreeRedis 使用示例");
// 創(chuàng)建 CSRedisClient 實例
var redis = new RedisClient("127.0.0.1:6379");
//設置鍵值對
redis.Set("key1", "value1");
Console.WriteLine($"設置鍵值對key1/value1操作成功");
//獲取鍵對應的值
var value = redis.Get("key1");
Console.WriteLine($"獲取鍵key1對應的值為:{value}");
// 刪除鍵
var delResult = redis.Del("key1");
Console.WriteLine($"刪除鍵key1操作結果:{delResult}");
//檢查鍵是否存在
var exists = redis.Exists("key1");
Console.WriteLine($"鍵key1是否存在: {exists}");
}
執(zhí)行結果如下:
05、NewLife.Redis
NewLife.Redis具有低延時,高性能,高吞吐量以及穩(wěn)定性、可靠性良好,因此在大量實時數(shù)據(jù)計算的應用場景有很好的發(fā)揮。它為針對大數(shù)據(jù)和消息隊列做了優(yōu)化,使得其可以用支撐日均百億級的調(diào)用量,而它的連接池可以做到100000個連接并發(fā)。在包含網(wǎng)絡通訊的前提下可以把get/set操作做到平均耗時200~600微秒。其二進制序列化方式也更有助于提升數(shù)據(jù)存儲和讀取效率。
下面我們寫個簡單的使用小例子:
public static void Run()
{
Console.WriteLine($"NewLife.Redis 使用示例");
// 創(chuàng)建 CSRedisClient 實例
var redis = new FullRedis("127.0.0.1:6379", "", 0);
//設置鍵值對
var setResult = redis.Set("key1", "value1");
Console.WriteLine($"設置鍵值對key1/value1操作結果:{setResult}");
//獲取鍵對應的值
var value = redis.Get<string>("key1");
Console.WriteLine($"獲取鍵key1對應的值為:{value}");
// 刪除鍵
var delResult = redis.Remove("key1");
Console.WriteLine($"刪除鍵key1操作結果:{delResult}");
//檢查鍵是否存在
var exists = redis.ContainsKey("key1");
Console.WriteLine($"鍵key1是否存在: {exists}");
}
06、BeetleX.Redis。
BeetleX.Redis是一款高可用、高性能、異步非阻塞設計的.net core客戶端庫。并且基本全面覆蓋redis-cli指令,提供了多種序列化方式,使用簡單輕松。
下面我們寫個簡單的使用小例子:
public static async Task RunAsync()
{
Console.WriteLine($"BeetleX.Redis 使用示例");
// 創(chuàng)建 CSRedisClient 實例
RedisDB redis = new RedisDB(0)
{
DataFormater = new JsonFormater()
};
//添加寫主機
redis.Host.AddWriteHost("127.0.0.1", 6379);
//添加讀主機
redis.Host.AddReadHost("127.0.0.1", 6379);
//設置鍵值對
var setResult = await redis.Set("key1", "value1");
Console.WriteLine($"設置鍵值對key1/value1操作結果:{setResult}");
//獲取鍵對應的值
var value = await redis.Get<string>("key1");
Console.WriteLine($"獲取鍵key1對應的值為:{value}");
// 刪除鍵
var delResult = await redis.Del("key1");
Console.WriteLine($"刪除鍵key1操作結果:{delResult}");
//檢查鍵是否存在
var exists = await redis.Exists("key1");
Console.WriteLine($"鍵key1是否存在: {exists}");
}
執(zhí)行結果如下:
07、總結
ServiceStack.Redis:綜合功能全面,適合需要商業(yè)支持的用戶。
StackExchange.Redis:官方推薦,功能全面,社區(qū)支持良好,文檔豐富。
CSRedisCore:功能齊全,簡單易用,適合快速開發(fā)。
FreeRedis:高性能,功能齊全,簡單易用,適合快速開發(fā)。
NewLife.Redis:高性能,高并發(fā),低延遲,分布式場景適合使用。
BeetleX.Redis。:高可用,高性能,異步操作,適合高負載場景。
注:測試方法代碼以及示例源碼都已經(jīng)上傳至代碼庫,有興趣的可以看看。https://gitee.com/hugogoos/Planner
轉(zhuǎn)自https://www.cnblogs.com/hugogoos/p/18409367
該文章在 2024/9/12 10:41:34 編輯過