分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > IT知识

.net core 2.0 redis驱动性能比拼

发布时间:2023-09-06 02:14责任编辑:蔡小小关键词:redis

今天来了三位主角,他们分别是大名鼎鼎的 StackExchange.Redis,无敌轻巧的 CSRedis,圆通日处理80亿访问的 NewLife.Redis。

作者从2016年学习.netcore以来,接触StackExchange.Redis遇到Timeout,这个问题坑了好多人。有人说2.0重构会解决了这个问题,碰巧本次测试发现2.0版本已经发布,本次测试版本为:2.0.505,期待StackExchange.Redis2.0重构版的测试。

CSRedis 已经很出名就不讲了,开源地址:https://github.com/2881099/csredis。

NewLife.Redis 号称日处理80亿访问,代码简洁功能不多,能解决特定的业务场景,看看到底有多强劲。

ps: NewLife.Redis 不支持异步方法,所以本次只测试同步方法。

测试代码

CSRedis.CSRedisClient csredis = new CSRedis.CSRedisClient("127.0.0.1:6379,password=,defaultDatabase=0,poolsize=100,ssl=false,writeBuffer=20480,prefix=");StackExchange.Redis.ConnectionMultiplexer seredis = StackExchange.Redis.ConnectionMultiplexer.Connect("127.0.0.1:6379,password=");StackExchange.Redis.IDatabase seredisDb = seredis.GetDatabase();var nlredis = Redis.Create("127.0.0.1:6379", 4);nlredis.Password = "";var nlredisClient = nlredis.Pool.Get();Task.Run(() => {var times = new[] { 1000, 10000, 100000 };foreach (var time in times) {var dt_csredis_set = DateTime.Now;for (var a = 0; a < time; a++) {csredis.Set($"benchmark_csredis_{a}", Guid.NewGuid().ToString());}var ts_csredis_set = DateTime.Now.Subtract(dt_csredis_set);var dt_seredis_set = DateTime.Now;for (var a = 0; a < time; a++) {seredisDb.StringSet($"benchmark_seredis_{a}", Guid.NewGuid().ToString());}var ts_seredis_set = DateTime.Now.Subtract(dt_seredis_set);var dt_nlredis_set = DateTime.Now;for (var a = 0; a < time; a++) {nlredisClient.Set($"benchmark_nlredis_{a}", Guid.NewGuid().ToString());}var ts_nlredis_set = DateTime.Now.Subtract(dt_nlredis_set);var dt_csredis_get = DateTime.Now;for (var a = 0; a < time; a++) {csredis.Get($"benchmark_csredis_{a}");}var ts_csredis_get = DateTime.Now.Subtract(dt_csredis_get);var dt_seredis_get = DateTime.Now;for (var a = 0; a < time; a++) {seredisDb.StringGet($"benchmark_seredis_{a}");}var ts_seredis_get = DateTime.Now.Subtract(dt_seredis_get);var dt_nlredis_get = DateTime.Now;for (var a = 0; a < time; a++) {nlredisClient.Get<string>($"benchmark_nlredis_{a}");}var ts_nlredis_get = DateTime.Now.Subtract(dt_nlredis_get);Console.WriteLine($@"循环次数: {time}csredis set: {ts_csredis_set.TotalMilliseconds}msstatckexchange.redis StringSet: {ts_seredis_set.TotalMilliseconds}msnewlife.redis set: {ts_nlredis_set.TotalMilliseconds}mscsredis get: {ts_csredis_get.TotalMilliseconds}msstatckexchange.redis StringGet: {ts_seredis_get.TotalMilliseconds}msnewlife.redis get: {ts_nlredis_get.TotalMilliseconds}ms");}});

测试这段代码,对 csredis 其实不公平的,因为内部使用的连接池有一点消耗。

另外,StackExchange.Redis.IDatabase 事先就初始化了,循环内没有多次 GetDatabase()。

测试结果


.net core 2.0 redis驱动性能比拼

原文地址:https://www.cnblogs.com/kellynic/p/9650996.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved