使用python连接redis很久以前就用到过,不过是单点连接,即非集群。这次碰到需要集群连接的,发现两种模式稍有不同,但可以统一处理。
代码如下:
# -*- coding: utf-8 -*-
__author__ = "chenk"
import redis
from rediscluster import StrictRedisCluster
import sys
class Connect_Reids:
def __init__(self,nodes=[{"host":"127.0.0.1","port":6379}],password=None,db=None):
"""redis连接初始化配置:
nodes = [{'host':'10.20.18.xxx','port':6380},
{'host':'10.20.xxx.xxx','port':6381},
{'host':'10.20.xxx.xxx','port':6382},
{'host':'10.20.xxx.xxx','port':6383},
{'host':'10.20.xxx.xxx','port':6384},
{'host':'10.20.xxx.xxx','port':6385}
]
"""
self.redis_nodes = nodes
self.redis_password = password
self.db = db
def redis_cluster(self):
"""reids 集群连接"""
try:
redis_conn = StrictRedisCluster(startup_nodes=self.redis_nodes,password=self.redis_password)
except Exception as e:
print("Connect Reids_Cluster Error!")
print(str(e))
sys.exit(1)
return redis_conn
def redis_single(self,redis_node):
"""redis 单点连接"""
try:
redis_conn = redis.Redis(host=redis_node["host"], port=redis_node["port"], \
db=redis_node["db"], password=redis_node["password"])
except Exception as e:
print("Connect Reids_Single Error")
print(str(e))
sys.exit(1)
return redis_conn
def connect_redis(self):
"""根据配置连接redis单点/reids集群"""
if len(self.redis_nodes) == 1:
return self.redis_single(self.redis_nodes[0])
else:
return self.redis_cluster()
上述代码,并不复杂,不作细致描述。需要注意一点是,群集的reids是不能设置数据库的,而单点的则可以设置数据库。这个是我无意中源码中看到的。源码描述如下:
一个最简单的实例(还有很多方法,不一一赘述了):
connect_redis = Connect_Reids()
r = connect_redis.connect_redis()
r.set("key","value") #设置key=value
r.get("key") #获取 key的值