Redis连接池的简单设计与实现

连接池属于一种池化技术,在现在高并发场景下用的很多,其作用如下。

1. 与Redis服务器是TCP管道连接。TCP的创建需要三次握手,如果使用连接池技术,不用每次都是创建TCP连接,避免了耗时的三次握手操作。而且在非池化的情况下,每次的TCP销毁要四次挥手,以及java对象的GC,都需要时间与性能消耗。

2. 资源分配。如果不适用池化技术,在多台机器访问同一个Redis服务器的情况下,如果每台机器与Redis服务器建立起的连接总数没有限制,那么Redis服务器就会有负荷过大的情况,性能下降。如果使用连接池技术,在每台机器上都限定了总的连接数,如果超了就等待。这样通过连接池更好的分配资源的利用。

 

Redis连接池的简单设计与实现

 

用什么来存放Redis连接?

Array中频繁的增加删除操作性能很差,所以元素都需要位移。

Set, 可以但是不是最合适的, 因为是无序的, 可能存在一个连接长时间不被使用的情况。

List, 本质也是数组实现。

Queue, 先进先出, 存在优先级, 不会造成一个连接长时间不被使用的情况

设计思路就是我们使用队列来管理创建的Redis连接,一个是活动队列来存储正在被使用的连接,一个是空闲队列来存储可用的连接。如果没有达到最大可用连接数目的时候,就新创建一个给用户使用,并且放到活动连接队列中。当一个线程释放连接的时候,则从活动连接中取出,然后放到可用连接中。

 

Redis连接池的简单设计与实现

Redis连接池的简单设计与实现