<p id="30QTDU61">经过前面的Redis基础学习,今天正式进入编码阶段了,进入编码阶段我们又同样面临一道多选题,选择什么客户端库?要是有选择困难症的又要头疼了。不过别担心我先头疼,今天就给大家介绍6款.NET系Redis客户端库: ServiceStack.Redis、StackExchange.Redis、CSRedisCore、FreeRedis、NewLife.Redis、BeetleX.Redis。</p><p><h5>01、ServiceStack.Redis</h5></p><p id="30QTDU62">ServiceStack.Redis算的上最老牌、最有名的一款Redis C#/.NET客户端库了,但是因为商业性导致对于大多数人来说不是首选。</p><p id="30QTDU63">ServiceStack.Redis是一款功能丰富、操作简单、高性能的C#/.NET客户端库,对原生的功能和特性提供很好的支持,同时又做了更高级的功能抽象,使得对简单对象或复杂类型序列化操作更容易。当然也同时提供了同步和异步API。</p><p id="30QTDU64">下面我们写个简单的使用小例子:</p><p><blockquote id="30QVVSSN">public static void Run()<br/>Console.WriteLine($"ServiceStack.Redis 使用示例");<br/>//创建连接池<br/>var pool = new RedisManagerPool("127.0.0.1:6379");<br/>//获取一个redis实例<br/>using var redis = pool.GetClient();<br/>//设置键值对<br/>var setResult = redis.Set("key1", "value1");<br/>Console.WriteLine($"设置键值对key1/value1操作结果:{setResult}");<br/>//获取键对应的值<br/>var value = redis.Get("key1");<br/>Console.WriteLine($"获取键key1对应的值为:{value}");<br/>// 删除键<br/>var delResult = redis.Remove("key1");<br/>Console.WriteLine($"删除键key1操作结果:{delResult}");<br/>//检查键是否存在<br/>var exists = redis.ContainsKey("key1");<br/>Console.WriteLine($"键key1是否存在: {exists}");<br/></blockquote></p><p id="30QTDU6P">执行结果如下:</p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2024%2F0912%2Fe5b6d474j00sjnr2x000yd000p300bbp.jpg&thumbnail=660x&quality=80&type=jpg"/><br/><br/></p><p><h5>02、StackExchange.Redis</h5></p><p id="30QTDU6R">StackExchange.Redis是一款基于.NET的、高性能的、免费的、功能全面的、通用的老牌Redis客户端。并且支持Redis多节点,Redis集群,IO多路复用,同步/异步双编程模型等技术,这也使得其与Redis交互同时兼具灵活性与高效性,大大提升了Redis读写的性能与并发。</p><p id="30QTDU6S">同时它还提供了丰富的高级功能,包括但不限于管道,连接池,事务,Lua脚本、订阅/发布等。序列化与压缩也提供了多种方式供以选择,很方便与.NET应用程序集成。</p><p id="30QTDU6T">下面我们写个简单的使用小例子:</p><p><blockquote id="30QVVSSO">public static void Run()<br/>Console.WriteLine($"StackExchange.Redis 使用示例");<br/>// 创建 ConnectionMultiplexer 实例<br/>using var connection = ConnectionMultiplexer.Connect("127.0.0.1:6379");<br/>//获取 Redis 数据库实例<br/>var redis = connection.GetDatabase();<br/>//设置键值对<br/>var setResult = redis.StringSet("key1", "value1");<br/>Console.WriteLine($"设置键值对key1/value1操作结果:{setResult}");<br/>//获取键对应的值<br/>var value = redis.StringGet("key1");<br/>Console.WriteLine($"获取键key1对应的值为:{value}");<br/>// 删除键<br/>var delResult = redis.KeyDelete("key1");<br/>Console.WriteLine($"删除键key1操作结果:{delResult}");<br/>//检查键是否存在<br/>var exists = redis.KeyExists("key1");<br/>Console.WriteLine($"键key1是否存在: {exists}");<br/></blockquote></p><p id="30QTDU7I">执行结果如下:</p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2024%2F0912%2Fj00sjnr2y000zd000p300bbp.jpg&thumbnail=660x&quality=80&type=jpg"/><br/><br/></p><p><h5>03、CSRedisCore</h5></p><p id="30QTDU7K">CSRedisCore是一款国人基于开源项目csredis上实现的著名Redis C#/.NET客户端库。它做到了所有方法名和redis-cli方法名保持一致。它支持Redis 集群、Redis 哨兵和Redis主从分离,以及geo类型、流类型命令,同时支持同步/异步接口。</p><p id="30QTDU7L">下面我们写个简单的使用小例子:</p><p><blockquote id="30QVVSSP">public static void Run()<br/>Console.WriteLine($"CSRedisRedis 使用示例");<br/>// 创建 CSRedisClient 实例<br/>var redis = new CSRedisClient("127.0.0.1:6379");<br/>//设置键值对<br/>var setResult = redis.Set("key1", "value1");<br/>Console.WriteLine($"设置键值对key1/value1操作结果:{setResult}");<br/>//获取键对应的值<br/>var value = redis.Get("key1");<br/>Console.WriteLine($"获取键key1对应的值为:{value}");<br/>// 删除键<br/>var delResult = redis.Del("key1");<br/>Console.WriteLine($"删除键key1操作结果:{delResult}");<br/>//检查键是否存在<br/>var exists = redis.Exists("key1");<br/>Console.WriteLine($"键key1是否存在: {exists}");<br/></blockquote></p><p id="30QTDU88">执行结果如下:</p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2024%2F0912%2Fec047263j00sjnr2s000yd000p300bbp.jpg&thumbnail=660x&quality=80&type=jpg"/><br/><br/></p><p><h5>04、FreeRedis</h5></p><p id="30QTDU8A">FreeRedis是CSRedisCore作者的另一个大作。至少从逻辑上来说也应该比CSRedisCore更优秀,事实也是如此,FreeRedis在内存使用、存储效率都做了优化,在持久化、容错方面也做了改进,同时还提供了更多的高级功能以及自定义选项。我们直接看官方介绍。</p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2024%2F0912%2F55396c34j00sjnr2t001xd000tz00frp.jpg&thumbnail=660x&quality=80&type=jpg"/><br/><br/></p><p id="30QTDU8C">单从介绍上来说CSRedisCore有的功能它有,CSRedisCore没有的功能它也有。总的来说功能更强大了。另外CSRedisCore目前处于维护阶段已经不新增功能了。因此更推荐FreeRedis。</p><p id="30QTDU8D">下面我们写个简单的使用小例子:</p><p><blockquote id="30QVVSSQ">public static void Run()<br/>Console.WriteLine($"FreeRedis 使用示例");<br/>// 创建 CSRedisClient 实例<br/>var redis = new RedisClient("127.0.0.1:6379");<br/>//设置键值对<br/>redis.Set("key1", "value1");<br/>Console.WriteLine($"设置键值对key1/value1操作成功");<br/>//获取键对应的值<br/>var value = redis.Get("key1");<br/>Console.WriteLine($"获取键key1对应的值为:{value}");<br/>// 删除键<br/>var delResult = redis.Del("key1");<br/>Console.WriteLine($"删除键key1操作结果:{delResult}");<br/>//检查键是否存在<br/>var exists = redis.Exists("key1");<br/>Console.WriteLine($"键key1是否存在: {exists}");<br/></blockquote></p><p id="30QTDU90">执行结果如下:</p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2024%2F0912%2F16ef290dj00sjnr2u000xd000p300bbp.jpg&thumbnail=660x&quality=80&type=jpg"/><br/><br/></p><p><h5>05、NewLife.Redis</h5></p><p id="30QTDU92">NewLife.Redis具有低延时,高性能,高吞吐量以及稳定性、可靠性良好,因此在大量实时数据计算的应用场景有很好的发挥。它为针对大数据和消息队列做了优化,使得其可以用支撑日均百亿级的调用量,而它的连接池可以做到个连接并发。在包含网络通讯的前提下可以把get/set操作做到平均耗时200~600微秒。其二进制序列化方式也更有助于提升数据存储和读取效率。</p><p id="30QTDU93">下面我们写个简单的使用小例子:</p><p><blockquote id="30QVVSSR">public static void Run()<br/>Console.WriteLine($"NewLife.Redis 使用示例");<br/>// 创建 CSRedisClient 实例<br/>var redis = new FullRedis("127.0.0.1:6379", "", 0);<br/>//设置键值对<br/>var setResult = redis.Set("key1", "value1");<br/>Console.WriteLine($"设置键值对key1/value1操作结果:{setResult}");<br/>//获取键对应的值<br/>var value = redis.Get("key1");<br/>Console.WriteLine($"获取键key1对应的值为:{value}");<br/>// 删除键<br/>var delResult = redis.Remove("key1");<br/>Console.WriteLine($"删除键key1操作结果:{delResult}");<br/>//检查键是否存在<br/>var exists = redis.ContainsKey("key1");<br/>Console.WriteLine($"键key1是否存在: {exists}");<br/></blockquote></p><p id="30QTDU9M">执行结果如下:</p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2024%2F0912%2Fe3eb7e7dj00sjnr2v000yd000p300bbp.jpg&thumbnail=660x&quality=80&type=jpg"/><br/><br/></p><p><h5>06、BeetleX.Redis</h5></p><p id="30QTDU9O">BeetleX.Redis是一款高可用、高性能、异步非阻塞设计的.net core客户端库。并且基本全面覆盖redis-cli指令,提供了多种序列化方式,使用简单轻松。</p><p id="30QTDU9P">下面我们写个简单的使用小例子:</p><p><blockquote id="30QVVSSS">public static async Task RunAsync()<br/>Console.WriteLine($"BeetleX.Redis 使用示例");<br/>// 创建 CSRedisClient 实例<br/>RedisDB redis = new RedisDB(0)<br/>DataFormater = new JsonFormater()<br/>//添加写主机<br/>redis.Host.AddWriteHost("127.0.0.1", 6379);<br/>//添加读主机<br/>redis.Host.AddReadHost("127.0.0.1", 6379);<br/>//设置键值对<br/>var setResult = await redis.Set("key1", "value1");<br/>Console.WriteLine($"设置键值对key1/value1操作结果:{setResult}");<br/>//获取键对应的值<br/>var value = await redis.Get("key1");<br/>Console.WriteLine($"获取键key1对应的值为:{value}");<br/>// 删除键<br/>var delResult = await redis.Del("key1");<br/>Console.WriteLine($"删除键key1操作结果:{delResult}");<br/>//检查键是否存在<br/>var exists = await redis.Exists("key1");<br/>Console.WriteLine($"键key1是否存在: {exists}");<br/></blockquote></p><p id="30QTDUAJ">执行结果如下:</p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2024%2F0912%2Fe5136e2fj00sjnr2w000yd000p300bbp.jpg&thumbnail=660x&quality=80&type=jpg"/><br/><br/></p><p><h5>07、总结</h5><ul><li id="30QTDUAM">ServiceStack.Redis:综合功能全面,适合需要商业支持的用户。</li><li id="30QTDUAN">StackExchange.Redis:官方推荐,功能全面,社区支持良好,文档丰富。</li><li id="30QTDUAO">CSRedisCore:功能齐全,简单易用,适合快速开发。</li><li id="30QTDUAP">FreeRedis:高性能,功能齐全,简单易用,适合快速开发。</li><li id="30QTDUAQ">NewLife.Redis:高性能,高并发,低延迟,分布式场景适合使用。</li><li id="30QTDUAR">BeetleX.Redis。:高可用,高性能,异步操作,适合高负载场景。</li></ul></p><p id="30QTDUAL"><strong>注</strong>:测试方法代码以及示例源码都已经上传至代码库,有兴趣的可以看看。https://gitee.com/hugogoos/Planner</p>
讯享网

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/171208.html