为什么Redis是单线程的(事件驱动)

为什么Redis是单线程的(事件驱动),第1张

为什么Redis是单线程的(事件驱动)

TL; DR :单线程使redis更加简单,并且redis仍然受IO约束。

内存是I / O。Redis仍受I /
O约束。当redis处于高负载下并达到每秒最大请求数时,它通常会饿死于网络带宽或内存带宽,并且通常不会占用大量CPU。对于某些命令,这不是真的,但是在大多数情况下,redis将受到网络或内存的严格I
/ O约束。

除非内存和网络速度突然提高几个数量级,否则单线程通常不是问题。如果您需要扩展一个或几个线程(即master <-> slave <-> slave
setup),那么您已经在研究Redis
Cluster。在这种情况下,如果您因某种原因而CPU饿了并且想要最大化线程数,则可以为每个CPU内核设置一个群集实例。

我对Redis的源代码或内部信息不是很熟悉,但是我可以看到使用单个线程如何使实现无锁原子 *** 作变得容易。线程会使事情变得更加复杂,并且由于redis不受CPU限制,因此似乎并没有提供很大的优势。在redis实例之上的某个级别实现并发似乎是一个不错的解决方案,这是Redis
Sentinel和Redis Cluster的帮助。

Redis需要很长时间时,其他请求会如何处理?

当redis完成长请求时,这些其他请求将被阻止。如果需要,可以使用

client-pause
命令进行测试。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4913826.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-12
下一篇 2022-11-12

发表评论

登录后才能评论

评论列表(0条)

保存