全部博文(921)
分类: Python/Ruby
2013-11-01 14:27:55
redis-py使用connection pool来管理对一个redis server的所有连接,避免每次建立、释放连接的开销。默认,每个Redis实例都会维护一个自己的连接池。可以直接建立一个连接池,然后作为参数Redis,这样就可以实现多个Redis实例共享一个连接池。
在一次分享中提到了Redis的长短链接的问题,引发了对redis-py的连接池机制的讨论。
通过源码发现,每创建一个Redis实例都会构造出一个ConnectionPool,每一次访问redis都会从这个连接池得到一个连接,访问完成之后,会把该连接放回连接池,下面是发送命令访问redis的execute_command方法实现:
当然,也可以构造一个ConnectionPool,在创建Redis实例时,可以将该ConnectionPool传入,那么后续的操作会从给定的ConnectionPool获得连接。
redis-py的作者在文档中也有详细说明:
pool = redis.ConnectionPool(host='localhost', port=6379, db=0)
关于redis-server的最大客户端数量问题
redis的文档这样说:
# Set the max number of connected clients at the same time. By default there
# is no limit, and it's up to the number of file descriptors the Redis process
# is able to open. The special value '0' means no limits.
# Once the limit is reached Redis will close all the new connections sending
# an error 'max number of clients reached'.
#
# maxclients 128
1) redis默认没有设置最大的连接客户端数量,这个数量取决于redis进程能够打开的文件句柄数量。
2) 可以手工配置最大的连接池数量。
原文:http://bofang.iteye.com/blog/1724394