经过前面的Redis基础学习,今天正式进入编码阶段了,进入编码阶段我们又同样面临一道多选题,选择什么客户端库?要是有选择困难症的又要头疼了。不过别担心我先头疼,今天就给大家介绍6款.NET系Redis客户端库: ServiceStack.Redis、StackExchange.Redis、CSRedisCore、FreeRedis、NewLife.Redis、BeetleX.Redis。

01、ServiceStack.Redis

ServiceStack.Redis算的上最老牌、最有名的一款Redis C#/.NET客户端库了,但是因为商业性导致对于大多数人来说不是首选。

ServiceStack.Redis是一款功能丰富、操作简单、高性能的C#/.NET客户端库,对原生的功能和特性提供很好的支持,同时又做了更高级的功能抽象,使得对简单对象或复杂类型序列化操作更容易。当然也同时提供了同步和异步API。

下面我们写个简单的使用小例子:

public static void Run()
{
Console.WriteLine($"ServiceStack.Redis 使用示例");
//创建连接池
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}");
}

执行结果如下:

02、StackExchange.Redis

StackExchange.Redis是一款基于.NET的、高性能的、免费的、功能全面的、通用的老牌Redis客户端。并且支持Redis多节点,Redis集群,IO多路复用,同步/异步双编程模型等技术,这也使得其与Redis交互同时兼具灵活性与高效性,大大提升了Redis读写的性能与并发。

同时它还提供了丰富的高级功能,包括但不限于管道,连接池,事务,Lua脚本、订阅/发布等。序列化与压缩也提供了多种方式供以选择,很方便与.NET应用程序集成。

下面我们写个简单的使用小例子:

public static void Run()
{
Console.WriteLine($"StackExchange.Redis 使用示例");
// 创建 ConnectionMultiplexer 实例
using var connection = ConnectionMultiplexer.Connect("127.0.0.1:6379");
//获取 Redis 数据库实例
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}");
}

执行结果如下:

03、CSRedisCore

CSRedisCore是一款国人基于开源项目csredis上实现的著名Redis C#/.NET客户端库。它做到了所有方法名和redis-cli方法名保持一致。它支持Redis 集群、Redis 哨兵和Redis主从分离,以及geo类型、流类型命令,同时支持同步/异步接口。

下面我们写个简单的使用小例子:

public static void Run()
{
Console.WriteLine($"CSRedisRedis 使用示例");
// 创建 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}");
}

执行结果如下:

04、FreeRedis

FreeRedis是CSRedisCore作者的另一个大作。至少从逻辑上来说也应该比CSRedisCore更优秀,事实也是如此,FreeRedis在内存使用、存储效率都做了优化,在持久化、容错方面也做了改进,同时还提供了更多的高级功能以及自定义选项。我们直接看官方介绍。

单从介绍上来说CSRedisCore有的功能它有,CSRedisCore没有的功能它也有。总的来说功能更强大了。另外CSRedisCore目前处于维护阶段已经不新增功能了。因此更推荐FreeRedis。

下面我们写个简单的使用小例子:

public static void Run()
{
Console.WriteLine($"FreeRedis 使用示例");
// 创建 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}");
}

执行结果如下:

05、NewLife.Redis

NewLife.Redis具有低延时,高性能,高吞吐量以及稳定性、可靠性良好,因此在大量实时数据计算的应用场景有很好的发挥。它为针对大数据和消息队列做了优化,使得其可以用支撑日均百亿级的调用量,而它的连接池可以做到100000个连接并发。在包含网络通讯的前提下可以把get/set操作做到平均耗时200~600微秒。其二进制序列化方式也更有助于提升数据存储和读取效率。

下面我们写个简单的使用小例子:

public static void Run()
{
Console.WriteLine($"NewLife.Redis 使用示例");
// 创建 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 使用示例");
// 创建 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}");
}

执行结果如下:

07、总结

  • ServiceStack.Redis:综合功能全面,适合需要商业支持的用户。

  • StackExchange.Redis:官方推荐,功能全面,社区支持良好,文档丰富。

  • CSRedisCore:功能齐全,简单易用,适合快速开发。

  • FreeRedis:高性能,功能齐全,简单易用,适合快速开发。

  • NewLife.Redis:高性能,高并发,低延迟,分布式场景适合使用。

  • BeetleX.Redis。:高可用,高性能,异步操作,适合高负载场景。

:测试方法代码以及示例源码都已经上传至代码库,有兴趣的可以看看。https://gitee.com/hugogoos/Planner

Redis 入门 - C#|.NET Core客户端库六种选择的更多相关文章

  1. 【网络爬虫入门02】HTTP客户端库Requests的基本原理与基础应用

    [网络爬虫入门02]HTTP客户端库Requests的基本原理与基础应用 广东职业技术学院  欧浩源 1.引言 实现网络爬虫的第一步就是要建立网络连接并向服务器或网页等网络资源发起请求.urllib是 ...

  2. ServiceStack.Redis 的 ASP.NET Core 扩展库

    给大家安利一款 ServiceStack.Redis 的 ASP.NET Core 扩展库,它是基于 ServiceStack.Redis.Core 开发的. 简单易用,开源免费,使用ASP.NET ...

  3. window下golang使用gRPC入门案例&net core客户端

    gRPC是google开源高性能分布式RPC框架,支持http/2 双向数据流传输及Protobuff,可以在任何环境下运行. 它可以有效地将数据中心内和跨数据中心的服务与可插拔支持进行负载均衡,跟踪 ...

  4. Visual Studio 2017中使用Libman管理客户端库

    什么是Libman 微软在Visual Studio 2017 15.8版本中内嵌了一个新的工具Library Manager. Library Manager(简称Libman)是一个客户端库管理工 ...

  5. Redis 入门与 ASP.NET Core 缓存

    目录 基础 Redis 库 连接 Redis 能用 redis 干啥 Redis 数据库存储 字符串 订阅发布 RedisValue ASP.NET Core 缓存与分布式缓存 内存中的缓存 ASP. ...

  6. .NET Core IdentityServer4实战 第一章-入门与API添加客户端凭据

    内容:本文带大家使用IdentityServer4进行对API授权保护的基本策略 作者:zara(张子浩) 欢迎分享,但需在文章鲜明处留下原文地址. 本文将要讲述如何使用IdentityServer4 ...

  7. Redis学习之路(008)- Redis C语言客户端库hiredis文档翻译

    Hiredis是Redis数据库一个轻量的C语言客户端库. 之所以轻量是由于它只是简单的提供了对redis操作语句支持的接口,并没有实现具体的操作语句的功能.但正是由于这种设计使我们只要熟悉了通用的r ...

  8. 原!!win7-64 安装python的 redis客户端库

    安装python的redis客户端库 本人系统已装python2.7 利用cmd命令行: 1.cmd-->python -->>>进入python命令下 >>> ...

  9. Redis入门很简单之七【使用Jedis实现客户端Sharding】

    Redis入门很简单之七[使用Jedis实现客户端Sharding] 博客分类: NoSQL/Redis/MongoDB redisjedisspringsharding分片 <一>. 背 ...

  10. redis入门(二)

    目录 redis入门(二) 前言 持久化 RDB AOF 持久化文件加载 高可用 哨兵 流程 安装部署 配置技巧 集群 原理 集群搭建 参考文档 redis入门(二) 前言 在redis入门(一)简单 ...

随机推荐

  1. $Kruskal$ 算法的实现 | 最小生成树

    \(Kruskal\) 算法 以 Luogu P3366 为例题 实现方法:从小到大遍历每一条线,如果该线连接的两点已经都在树内则不处理,否则描出这条线 从小到大是一个贪心的实现方法,由于每描出一条线 ...

  2. Jmeter察看结果树中文乱码的处理方法

    1.接口执行成功后,在察看结果树返回的Response信息显示中文乱码 2.处理方法: 到jmeter安装目录找到\bin\jmeter.properties文件.右键记事本打开文件定位到这行代码 & ...

  3. CentOS-7离线安装policycoreutils-python

    1.下载相关安装包 policycoreutils-2.5-34.el7.src.rpm 快速下载地址:https://vault.centos.org/7.9.2009/os/x86_64/Pack ...

  4. 【Java】Generic 泛型

    Generic 泛型 为什么需要泛型? 集合容器再设计阶段/声明阶段不能确定这个容器实际存储的是什么类型的对象 JDK5 以前只能把元素设计为Object基类 在JDK5之后用泛型来约束对象类型 除了 ...

  5. 【OracleDB】 09 创建和管理表

    Oracle常见的数据库对象 - 表 基本的数据存储集合,行与列组成 - 视图 抽取的逻辑集合 - 序列 提供规律性的数值 - 索引 提高查询效率 - 同义词 对象别名 TABLE 表 用户定义的表: ...

  6. LogCat连接安卓手机拉取日志到本地(Unity开发版)

    unity开发游戏的时候经常会碰到安卓手机真机报错/崩溃,定位问题需要拉取安卓手机上的日志到电脑上来查看. 1. unity安装的时候,勾选安卓模块(sdk这些记得勾选安装) 2. 打开对应安卓模块个 ...

  7. Jax的加速层的伪代码/中间层代码的生成和查看

    地址: https://jax.readthedocs.io/en/latest/notebooks/thinking_in_jax.html#jit-mechanics-tracing-and-st ...

  8. CUDA编译.cu文件报错unsupported GNU version! gcc versions later than 10 are not supported! The nvcc flag '-allow-unsupported-compiler' can be used to override this version check;

    最近使用cuda11.3编译.cu文件,报错: #error -- unsupported GNU version! gcc versions later than 10 are not suppor ...

  9. JAVA集合专题之深入学习

    1.背景 集合虽然用起来非常简单... 但是面试确问得很多,很深.... 最重要的是集合的设计里面使用了大量的非常典型的多线程设计... 如果能把集合中的源码学一遍,相信你的多线程功底会大大提升... ...

  10. c#12 实验特性Interceptor如何使用的一个简单但完整的示例

    一直有很多转载dotnet对Interceptor说明文档的,但鲜有说明Interceptor如何使用的,这里写一篇简单示例来展示一下 c# 12 实验特性Interceptor 是什么? 官方解释如 ...