首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

Redis 入门 - C#|.NET Core客户端库六种选择

编程知识
2024年09月12日 00:43

经过前面的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

From:https://www.cnblogs.com/hugogoos/p/18409367
本文地址: http://www.shuzixingkong.net/article/1896
0评论
提交 加载更多评论
其他文章 设计模式之状态模式(三分钟学会一个设计模式)
状态模式(State Pattern)的定义是这样的:类的行为是基于它的状态改变的。注意这里的状态不是狭义的指对象维护了一个“状态”字段,我们传入了不同的枚举值,对象整体的表现行为(对外方法)就改变了。而是指内部的(任意)字段如果发生了变化,那么它的状态就变了,那么它对外的表现形式就变了。它是面向对
设计模式之状态模式(三分钟学会一个设计模式)
痞子衡嵌入式:在MDK开发环境下自定义安装与切换不同编译器版本的方法
大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家分享的是在MDK开发环境下自定义安装与切换不同编译器版本的方法。 Keil MDK 想必是嵌入式开发者最熟悉的工具之一了,自 2005 年 Arm 公司收购 Keil 公司之后,MDK 就走上了发展快车道,从 v2.50a 一路狂奔到现在最新的
痞子衡嵌入式:在MDK开发环境下自定义安装与切换不同编译器版本的方法 痞子衡嵌入式:在MDK开发环境下自定义安装与切换不同编译器版本的方法 痞子衡嵌入式:在MDK开发环境下自定义安装与切换不同编译器版本的方法
架构师备考的一些思考(二)
前言 以我的视野来看,部长或技术总监这种岗位还是比较难竞争的,换言之,程序员的上升空间比较窄,如果想要拿到高级岗位,最好的是工作三五年后就转项目经理,然后再往上爬。 架构师倒是也能晋升高级岗位,但就效率而言,是非常低的。就我的经验而言,架构师系的高级职位通常是技术管理一手抓,但这也代表着,责任更大,
架构师备考的一些思考(二)
在 Web 中判断页面是不是刷新
在 Web 开发中,我们经常需要区分用户是否通过刷新操作重新加载了页面。这一操作可能是由用户手动刷新(如按下 F5 键或点击浏览器刷新按钮)或通过浏览器自动重新加载。判断页面是否刷新有助于开发者优化用户体验,例如在使用 vue 的时候需要进行权限控制,就需要判断在刷新后根据登录者的权限去添加对应的路
在 Web 中判断页面是不是刷新 在 Web 中判断页面是不是刷新 在 Web 中判断页面是不是刷新
Redis、Nginx、SQLite、Elasticsearch等开源软件成功的原因及它们对IT技术人员的启示
引言 这些年在自研产品,对于如何做好产品进行了一些思考。随着开源软件的蓬勃发展,许多开源项目已经成为IT行业的核心组成部分。像Redis、Nginx、SQLite、Elasticsearch这些知名的开源软件,已经成为了开发者的首选工具。这些开源软件不仅在技术性能上取得了重大突破,还在社区建设、生态
论文阅读翻译之Deep reinforcement learning from human preferences
论文阅读翻译之Deep reinforcement learning from human preferences 关于 首次发表日期:2024-09-11 论文原文链接:https://arxiv.org/abs/1706.03741 论文arxiv首次提交日期:12 Jun 2017 使用KIM
论文阅读翻译之Deep reinforcement learning from human preferences
使用VSCode搭建UniApp + TS + Vue3 + Vite项目
`uniapp`是一个使用Vue.js开发所有前端应用的框架,开发者编写一套代码,可发布到iOS、Android、以及各种小程序。深受广大前端开发者的喜爱。`uniapp`官方也提供了自己的IDE工具`HBuilderX`,可以快速开发`uniapp`项目。但是很多前端的同学已经比较习惯使用`VSC
使用VSCode搭建UniApp + TS + Vue3 + Vite项目 使用VSCode搭建UniApp + TS + Vue3 + Vite项目 使用VSCode搭建UniApp + TS + Vue3 + Vite项目
FALCON:打破界限,粗粒度标签的无监督细粒度类别推断,已开源| ICML'24
在许多实际应用中,相对于反映类别之间微妙差异的细粒度标签,我们更容易获取粗粒度标签。然而,现有方法无法利用粗标签以无监督的方式推断细粒度标签。为了填补这个空白,论文提出了FALCON,一种从粗粒度标记数据中无需细粒度级别的监督就能发现细粒度类别的方法。FALCON同时推断未知的细粒度类别和粗粒度类别
FALCON:打破界限,粗粒度标签的无监督细粒度类别推断,已开源| ICML'24 FALCON:打破界限,粗粒度标签的无监督细粒度类别推断,已开源| ICML'24 FALCON:打破界限,粗粒度标签的无监督细粒度类别推断,已开源| ICML'24