python中Redis, StrictRedis, ConnectPool的联系与区别
先上结论:直接使用 StrictRedis() 即可。
三者关系: StrictRedis = Redis > ConnectPool(包含)
原因如下:
- 官方考虑向后兼容性,推荐使用StrictRedis()。两者没有任何差别,redis.client.py 源码中可以直接看出StrictRedis就是Redis
StrictRedis = Redis
-
ConnectPool是redis的连接池类, 是用来实现连接池及其管理的, 而StrictRedis()默认使用连接池,不必在单独使用ConnectPool。(这个在后面的源码里会详细解释)
-
因此,我们无需考虑redis关于连接的细节,直接使用StrictRedis()即可
下面我们通过源码,深入探寻Redis, StrictiRedis, connectionPool之间的联系,以及实现原理。
既然StrictRedis就是Redis, 那就直接扒Redis源码看看:
Redis.__init__(…)
def __init__(self, host='localhost', port=6379,
db=0, password=None, socket_timeout=None,
socket_connect_timeout=None,
socket_keepalive=None, socket_keepalive_options=None,
connection_pool=None, unix_socket_path=None,
encoding='utf-8', encoding_errors='strict',
charset=None, errors=None,
decode_responses=False, retry_on_timeout=False,
ssl=False, ssl_keyfile=None, ssl_certfile=None,
ssl_cert_reqs='required', ssl_ca_certs=None,
max_connections=None):
if not connection_pool:
... # 为了阅读效果,精简了部分注释和无关代码。
kwargs = {
'db': db,
'password': password,
'socket_timeout': socket_timeout,
'encoding': encoding,
'encoding_errors': encoding_errors,
'decode_responses': decode