我正在尝试使用 Redis 发布/订阅在应用程序之间高速传输数据(每秒 25000 条消息)。
我已经测试如下:
拓扑:
1 个发布者、1 个订阅者和 Redis 服务器。所有都托管在同一台电脑上。
电脑硬件:
CPU: Intel(R) Core(TM) I7-4578U CPU@3.00GHz 内存:16.0GB
代码:
Stopwatch sw = new Stopwatch();
sw.Start();
while (_started)
{
//db.PublishAsync(RawMessagesCapturedMsg.TopicGroupName, redisValue);
db.Publish(RawMessagesCapturedMsg.TopicGroupName, redisValue);
totalRedisMsg++;
if (totalRedisMsg % 10000 == 0)
{
Console.WriteLine("totalRedisMsg: {0} @ {1}, time used(ms): {2}",
totalRedisMsg, DateTime.Now, sw.ElapsedMilliseconds);
}
}
sw.Stop();
如结果所示,发布10k条消息大约需要6秒。
我想确认是redis(或者StackExchange.Redis)的实际性能吗?还是我的测试有问题?
更新:
根据接受的答案,我发现原因是我的消息大小太大 (300kB)。
最佳答案
要检查的事情:
我手头有一个用来回答另一个问题的基准。在 Java(生菜客户端库)中,我有 1 个线程的结果,本地 cpu i5-6400,远程 cpu E5-2603 v4,0.180ms ping 到远程,消息是“你好”。
Benchmark (address) Mode Cnt Score Error Units
LettuceThreads.pooled socket thrpt 5 35699.267 ± 706.946 ops/s
LettuceThreads.pooled localhost thrpt 5 28130.801 ± 9476.584 ops/s
LettuceThreads.pooled remote thrpt 5 3080.115 ± 422.390 ops/s
LettuceThreads.shared socket thrpt 5 41717.332 ± 3559.226 ops/s
LettuceThreads.shared localhost thrpt 5 31092.925 ± 9894.748 ops/s
LettuceThreads.shared remote thrpt 5 3920.260 ± 178.637 ops/s
将它与您拥有的硬件进行比较,也许它会帮助您评估库的性能。请注意,远程性能如何下降 10 倍,即使知道 CPU 慢 2 倍,这也很多。
下面是16个线程。因此,如您所见,尽管有延迟,但更多线程可能至少有助于获得吞吐量。
Benchmark (address) Mode Cnt Score Error Units
LettuceThreads.pooled socket thrpt 5 123846.426 ± 2926.807 ops/s
LettuceThreads.pooled localhost thrpt 5 83997.678 ± 31410.595 ops/s
LettuceThreads.pooled remote thrpt 5 31045.111 ± 2198.065 ops/s
LettuceThreads.shared socket thrpt 5 218331.662 ± 17459.352 ops/s
LettuceThreads.shared localhost thrpt 5 182296.689 ± 52163.154 ops/s
LettuceThreads.shared remote thrpt 5 30803.575 ± 2128.306 ops/s
关于performance - redis (StackExchange.Redis) 发布性能差?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50327788/
无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD
有人知道在发布新版本的Ruby和Rails时收到电子邮件的方法吗?他们有邮件列表,RubyonRails有一个推特,但我不想听到那些随之而来的喧嚣,我只想知道什么时候发布新版本,尤其是那些有安全修复的版本。 最佳答案 从therailsblog获取提要.http://weblog.rubyonrails.org/feed/atom.xml 关于ruby-on-rails-如何在发布新的Ruby或Rails版本时收到通知?,我们在StackOverflow上找到一个类似的问题:
我目前对后台队列不太满意。我正在尝试让Resque工作。我已经安装了redis和Resquegem。Redis正在运行。一个worker正在运行(rakeresque:workQUEUE=simple)。使用Web界面,我可以看到工作人员正在运行并等待工作。当我运行“rakeget_updates”时,作业已排队但失败了。我已经用defself.perform和defperform试过了。发条.raketask:get_updates=>:environmentdoResque.enqueue(GetUpdates)end类文件(app/workers/get_updates.rb)c
我正在使用Ruby解决一些ProjectEuler问题,特别是这里我要讨论的问题25(Fibonacci数列中包含1000位数字的第一项的索引是多少?)。起初,我使用的是Ruby2.2.3,我将问题编码为:number=3a=1b=2whileb.to_s.length但后来我发现2.4.2版本有一个名为digits的方法,这正是我需要的。我转换为代码:whileb.digits.length当我比较这两种方法时,digits慢得多。时间./025/problem025.rb0.13s用户0.02s系统80%cpu0.190总计./025/problem025.rb2.19s用户0.0
我正在寻找一个用ruby演示计时器的在线示例,并发现了下面的代码。它按预期工作,但这个简单的程序使用30Mo内存(如Windows任务管理器中所示)和太多CPU有意义吗?非常感谢deftime_blockstart_time=Time.nowThread.new{yield}Time.now-start_timeenddefrepeat_every(seconds)whiletruedotime_spent=time_block{yield}#Tohandle-vesleepinteravalsleep(seconds-time_spent)iftime_spent
如果用户是所有者,我有一个条件来检查说删除和文章。delete_articleifuser.owner?另一种方式是user.owner?&&delete_article选择它有什么好处还是它只是一种写作风格 最佳答案 性能不太可能成为该声明的问题。第一个要好得多-它更容易阅读。您future的自己和其他将开始编写代码的人会为此感谢您。 关于ruby-on-rails-如果条件与&&,是否有任何性能提升,我们在StackOverflow上找到一个类似的问题:
尝试从我的AngularJS端将数据发布到Rails服务器时出现问题。服务器错误:ActionController::RoutingError(Noroutematches[OPTIONS]"/users"):actionpack(4.1.9)lib/action_dispatch/middleware/debug_exceptions.rb:21:in`call'actionpack(4.1.9)lib/action_dispatch/middleware/show_exceptions.rb:30:in`call'railties(4.1.9)lib/rails/rack/logg
我编写了一个Ruby应用程序,它可以解析来自不同格式html、xml和csv文件的源中的大量数据。我如何找出代码的哪些区域花费的时间最长?有没有关于如何提高Ruby应用程序性能的好资源?或者您是否有任何始终遵循的性能编码标准?例如,你总是用加入你的字符串吗?output=String.newoutput或者你会使用output="#{part_one}#{part_two}\n" 最佳答案 好吧,有一些众所周知的做法,例如字符串连接比“#{value}”慢得多,但是为了找出您的脚本在哪里消耗了大部分时间或比所需时间更多,您需要进行分
当音乐碰上区块链技术,会擦出怎样的火花?或许周杰伦已经给了我们答案。8月29日下午,B站独家首发周杰伦限定珍藏Demo独家访谈VCR,周杰伦在VCR里分享了《晴天》《青花瓷》《搁浅》《爱在西元前》四首经典歌曲Demo背后的创作故事,并首次公布18年前未发布的神秘作品《纽约地铁》的Demo。在VCR中,方文山和杰威尔音乐提及到“多亏了区块链技术,现在我们可以将这些Demos,变成独一无二具有收藏价值的艺术品,这些Demos可以在薄盒(国内数藏平台)上听到。”如何将音乐与区块链技术相结合,薄盒方面称:“薄盒作为区块链技术服务方,打破传统对于区块链技术只能作为数字收藏的理解。聚焦于区块链技术赋能,在
LL库和HAL库简介LL:Low-Layer,底层库HAL:HardwareAbstractionLayer,硬件抽象层库LL库和hal库对比,很精简,这实际上是一个精简的库。LL库的配置选择如下:在STM32CUBEMX中,点击菜单的“ProjectManager”–>“AdvancedSettings”,在下面的界面中选择“AdvancedSettings”,然后在每个模块后面选择使用的库总结:1、如果使用的MCU是小容量的,那么STM32CubeLL将是最佳选择;2、如果结合可移植性和优化,使用STM32CubeHAL并使用特定的优化实现替换一些调用,可保持最大的可移植性。另外HAL和L