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命令进行测试。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)