redis连接池问题

ddxx11223 · · 1316 次点击
举个简单的例子,比如有个等候室,有一个处理室,然后当中有一条10M长的通道。同时只能有1个人进入处理室,现在有2个方案 1. 大家都在等候室里,等到处理室的人返回再让第二个人再走过走廊 2. 直接在处理室门口(走廊)排队等着 同样都是单线程处理,还是稍微有点区别的
#10
更多评论
redis采用的多路 I/O 复用(可以让单个线程高效的处理多个连接请求)
#1
https://studygolang.com/articles/10660 这位同学尝试不用连接池,而是实现应用层面的pipelining(不是redis自身协议层面的pipeline): 现有的redis客户端都是需要所有goroutine同步对某个redis连接的使用,goroutine A发出请求并收到回复后才能将连接让给其它goroutine使用,而在A等待回复的过程中redis协议是支持可以继续往这条连接发送请求的。可以用一条连接来同步发送所有goroutine的并发请求,然后根据从redis服务端收到的回复按发送顺序逐个回复各个goroutine的请求 连接池就是多个goroutine通过多条连接同时往redis发请求来达到pipelining的效果,试图充分利用redis,不让它空闲。但这样不如直接利用一条连接来实现应用层的pipelining,就像http1.x的pipelining没有真正实现,到http2就彻底实现了,现在的redis服务端就像http1.x的服务端实现是FIFO,也没办法做到像http2那样彻底的pipelining,除非redis再弄个协议 https://hpbn.co/http1x/#http-pipelining
#2