redis连接池问题

ddxx11223 · · 1331 次点击
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
更多评论
redis采用的多路 I/O 复用(可以让单个线程高效的处理多个连接请求)
#1
redis本身就是单线程的,我多个连接同时去连redis(不还是得排队么),然后执行指令,和单个全局连接直接去一个个执行redis指令,感觉应该差不多性能吧?
#3