如果有不对的地方还需要再改
参考文章:
https://moonbingbing.gitbooks.io/openresty-best-practices/content/redis/out_package.html
https://www.cnblogs.com/hellocyc/p/4365935.html
https://blog.csdn.net/Rodgexue/article/details/78068783
首先这个keepalive中有什么
--连接池大小,最大的空闲时间
redis:set_keepalive(redisKeepaliveSize, redisMaxRestTime)
我们是在什么情况下使用的keepalive:
keepalive是在redis已经建立了连接,并进行相关值请求以后执行的!!!
我们在使用lua连接redis的时候,期望它自身具备以下几个特征:
- new、connect 函数合体,使用时只负责申请,尽量少关心什么时候具体连接、释放;
- 默认 Redis 数据库连接地址,但是允许自定义;
- 每次 Redis 使用完毕,自动释放 Redis 连接到连接池供其他请求复用;
所以就会使用到keepalive,这就引出了这么几个和问题:
1.什么是连接池?
2.keepalive中大小对连接池有什么影响?是不是越大越好?
3.这个空闲时间是干什么的,对连接池有什么影响?
1.连接池可以理解为方便我们操作数据库的中间方法。其方便之处在于不用我们每次都写要连接哪个机器,端口号等等的操作。同时在连接池中可以写很多便于我们对连接池操作的方法,或者对整个请求的优化。
2.
2.1误区:
长连接
长连接其实就是建立了一次连接 然后中间redis的命令都能一直使用,每次使用都不需要重新建立一个连接,这样可以减少建立redis连接时间。
我一开始以为这里的连接池大小是指的长连接的大小,后面看了一些资料反应过来,其实和长连接没有关系。就是连接的大小。也就是说请求redis连接的数量,不分长短。
2.2这个是用来干嘛的
数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中(连接池的概念)。也就是说建立了连接以后复用tcp连接 避免频繁建立连接的开销。维系这些连接,不让连接被断开。
2.3连接的大小
连接的数量就是连接池的大小,redis配置中最大允许1w个连接。当应用程序中的并发连接数超过redis/mc服务器端的允许的连接数时,对redis/mc进行扩容为最佳方案,保证db能够提供高性能服务。
我们可以认为 连接池越大,就具有更高的性能。当然,连接池的大小并不是在可控范围内越大越好。服务器端维持很大的连接数,一方面需要消耗很多的进程资源,对于单进程的redis或者twemproxy(解决redis集群的一个工具),需要占用进程的调度时间;另外,过多的空闲连接数对于db的容量评估也带来错误性的判断。
2.4客户端连接池的配置要点。
1) 连接池的大小。单个应用程序中,接口的并发的连接数的1.5倍足够满足需求。
2) 保持一定的空闲连接数,这样可以保证客户端可快速的获取连接对象。
3) 合理设置空闲接的回收时间。避免客户端维持大量的空闲连接。
4) 定时检查长连接对象的有效性。主要是防止网络抖动或者db端出现异常时主动关闭连接。
3.这个空闲时间就是字面意思,不能让这些连接一直保持。。一段时间后给他断开。避免资源的浪费