『性能』ServiceStack.Redis 和 StackExchange.Redis 性能比较

背景

近来,需要用到 Redis 这类缓存技术 —— MongoDB 和 Redis 没有进行过比较。

我也懒得在这些细节上 纠结那么多 —— 按照网友给出的文章,听从网友建议,选择 Redis。

Redis 我在 2014年的时候正式用过一次,那时候用的是 ServiceStack.Redis —— 要引用4、5个程序集,挺闹心的。

正题

开始比较 客户端调用时, ServiceStack.Redis 与 StackExchange.Reids 的性能。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using ServiceStack.Redis;
using StackExchange.Redis;

namespace Temp_20180713_Redis
{
    class Program
    {
        static void Main(string[] args)
        {
            DateTime time0 = DateTime.Now;
            DateTime time1 = DateTime.Now;




            #region  StackExchange.Redis

            {
                IConnectionMultiplexer proxy = ConnectionMultiplexer.Connect("127.0.0.1");
                IDatabase db = proxy.GetDatabase(6379);



                time0 = DateTime.Now;
                for (int i = 0; i < 100000; i++)
                {
                    db.StringSet("AAAA", "AAAAAAA");
                }
                time1 = DateTime.Now;
                Console.WriteLine("StackExchange.Redis 赋值 10,0000 次, 耗时: {0} 秒", (time1 - time0).TotalSeconds);



                string valueStr = "";
                time0 = DateTime.Now;
                for (int i = 0; i < 100000; i++)
                {
                    RedisValue value = db.StringGet("AAAA");
                    valueStr = value;
                }
                time1 = DateTime.Now;
                Console.WriteLine("StackExchange.Redis 取值 10,0000 次, 耗时: {0} 秒", (time1 - time0).TotalSeconds);
                Console.WriteLine(valueStr);
                Console.WriteLine("----------------------------------");
            }

            #endregion




            #region  ServiceStack.Redis


            using (RedisClient redisClient = new RedisClient("127.0.0.1", 6379))
            {
                time0 = DateTime.Now;
                for (int i = 0; i < 100000; i++)
                {
                    redisClient.Set("AAAA", "AAAAAAA");
                }
                time1 = DateTime.Now;
                Console.WriteLine("ServiceStack.Redis 赋值 10,0000 次, 耗时: {0} 秒", (time1 - time0).TotalSeconds);



                string valueStr = "";
                time0 = DateTime.Now;
                for (int i = 0; i < 100000; i++)
                {
                    valueStr = redisClient.Get<string>("AAAA");
                }
                time1 = DateTime.Now;
                Console.WriteLine("ServiceStack.Redis 取值 10,0000 次, 耗时: {0} 秒", (time1 - time0).TotalSeconds);
                Console.WriteLine(valueStr);
                Console.WriteLine("----------------------------------");
            }



            #endregion

        }
    }
}

比较结果如图:

没错: ServiceStack.Redis 居然崩溃了:每小时只能调用 6000次,除非购买商用版。【别说商用了,6000次,我个人使用都不够啊】

我将 ServiceStack.Redis 降级到 3.9.40 版本,继续测试

结论

同样的 10W次 赋值、取值 调用。

StackExchange.Redis 耗时 18秒

ServiceStack.Redis 耗时 16秒

—— ServiceStack.Redis 性能高一点点。

建议

但最终:我还是觉得应该选择 StackExchange.Redis

理由如下:

  1. StackExchange.Redis 和 ServiceStack.Redis 两者性能差距不大,性能差别仅 11%

  2. StackExchange.Redis 没有版权限制,暂时没有出现 不给钱只调用 6000 次。

  3. 我看了一下 两个框架的函数定义: StackExchange.Redis 定义得更友善一些。反例比如:ServiceStack.Redis 有 Hash字段赋值函数,却没有 Hash字段取值函数(除非你把指定的Hash 全部键值对都取出来,然后再筛选指定的字段 —— 那些不需要的也得取出来,感觉挺浪费的)

  4. 而且某些地方的 隐式转换 可以节省不少代码:自动帮你推断你想要的数据类型。

 

当然,两者的实现原理 我这边并未深究,也懒得深究。

其实,我也不知道 StackExchange.Redis 是否支持 .Net 40 —— 否则就真的是一大败笔了。

其实我想要的很简单

  1. 最低支持 .Net 40。

  2. 没有过分的使用限制(比如每小时6000次)。

  3. 不要引用一堆的程序集,最好一个程序集就行。

  4. 友好的函数封装

 

 

我特别讨厌,一个三方框架好几个程序集

如果这个框架,实现的功能比较多,好几个程序集区分功能 我可以理解。

你特么就只实现一个功能,却稀里糊涂给我一堆程序集 是个什么鬼 ~

看到太多程序集,我会有一种不安全感:

如果发布时少了个程序集怎么办?

程序集少更新了其中一个怎么办?

这些程序集在偷偷干嘛?

如果复制程序集时,把部分64位的复制替换了了32位而导致执行时(可能是偶发异常)才报错怎么办?)

就不能把 附属程序集 嵌入到主程序集中么?要么内存加载子程序集,要么自动释放子程序集。

我只想无脑的 Ctrl+C Ctrl+V,我不想 复制粘贴时 还要顾忌这、担心那。

 

转载于:https://www.cnblogs.com/shuxiaolong/p/ServiceStack_Redis_StackExchange_Redis.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: StackExchange.Redis 是一个.NET平台下的开源Redis客户端库,它提供了一种高性能、稳定和易于使用的方式来与Redis服务器进行通信。它支持异步和同步操作,并提供了一些高级特性,如管道、发布/订阅等。 StackExchange.Redis 具有以下特点: - 快速:通过使用高性能、低级别的Redis通信协议,StackExchange.Redis 可以实现高效的数据访问。 - 可扩展性:StackExchange.Redis 支持分区功能,使它能够在多个Redis节点上分布数据,并且可以在需要时轻松地添加或删除节点。 - 可靠性:StackExchange.Redis 有一个内置的连接池来管理与Redis服务器的连接,从而可以提高性能和可靠性,并避免了频繁的连接/断开开销。 - 易用性:StackExchange.Redis 提供了一个简单的API,使得开发人员能够轻松地与Redis进行交互。 总的来说,如果你在.NET平台上使用RedisStackExchange.Redis 应该是你的首选。 ### 回答2: StackExchange.Redis 是一个基于Redis的 .Net客户端库,由StackExchange团队开发和维护。Redis内存数据库是非常流行的键值对存储,支持复杂数据结构,速度快,有完善的集群方案,在web应用程序、消息系统等应用场景中被广泛使用。 StackExchange.Redis提供了方便易用、高性能、可扩展的API,可以直接向Redis发送命令、订阅和发布消息、连接Redis集群等。他进一步扩展了Redis命令,使其更加简单易用,并支持事务、管道和多线程操作。同时,StackExchange.Redis支持Redis的高级特性,如SortedSet和Hash;而且,它还能够在运行时自动检测Redis服务状态,支持Redis Sentinel、Cluster和多节点环境。 此外,StackExchange.Redis还支持应用程序跟踪(application tracing),采用异步API调用,从而提高了性能和可伸缩性。与其他Redis客户端库不同,StackExchange.Redis实现了连接池、序列化和反序列化器等高级功能,使用起来更加方便和优雅,可以减少代码量和复杂性。 总的来说,StackExchange.Redis是一个很不错的Redis客户端库,它提供了强大而与Redis完全兼容的API,打破了语言壁垒,使得开发者可以在自己喜欢的语言环境(例如.Net)中使用 Redis 。 许多一流的公司如 StackOverflow和GitHub都使用 StackExchange.Redis,证明了它的可靠性和性能优势。 ### 回答3: StackExchange.RedisRedis数据库的一个适用于 .NET 编程语言的客户端。它提供了一组丰富的功能,用于在 .NET 框架内与Redis数据库进行交互。 StackExchange.Redis旨在为 .NET 开发人员提供最佳的Redis集成体验。StackExchange.Redis提供了许多优点,其中最主要的有: 高度优化的读写操作。StackExchange.Redis客户端库具有非常高的效率,用于从Redis服务器读取和写入数据时,可大大减少网络流量和延迟。这使得它成为处理高吞吐量负载的很好的选择。 支持许多复杂数据类型。除了提供基本的字符串和整数类型之外,StackExchange.Redis还支持许多复杂的数据类型,例如哈希表、排序集合和列表数据类型。这些数据类型将极大地帮助开发人员设计和实施高效的Redis应用程序。 易于使用和集成。StackExchange.Redis具有完美的适配性,可以很简单地与 .NET 中的 ASP.NET 应用程序、Windows 服务、控制台应用程序等相集成。此外,它具有丰富的文档、教程和API reference,可以让开发者轻松入手。 另外,StackExchange.Redis还包括许多其他特性,如:连接复用、事务支持、发布与订阅、管道等。这使得它成为在 .NET 编程语言中使用Redis数据库的非常好的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值