每天进步一点点-构建redis连接池
import threading
import redis
from rediscluster import StrictRedisCluster
from configs import CURRENT_CONFIG
# 单连
class RedisPoolUtil(object):
"""
多个redis实例共享同一个连接池
"""
_instance_lock = threading.Lock()
def __init__(self):
if not hasattr(RedisPoolUtil, 'pool'):
RedisPoolUtil.create_pool()
self.conn = redis.Redis(connection_pool=RedisPoolUtil.pool)
def __new__(cls, *args, **kwargs):
if not hasattr(RedisPoolUtil, '_instance'):
with RedisPoolUtil._instance_lock:
if not hasattr(RedisPoolUtil, '_instance'):
RedisPoolUtil._instance = object.__new__(cls)
return RedisPoolUtil._instance
@classmethod
def create_pool(cls):
RedisPoolUtil.pool = redis.ConnectionPool(
host=CURRENT_CONFIG.get("REDIS_SERVER_HOST") if CURRENT_CONFIG.get(
"REDIS_SERVER_HOST") else "localhost",
port=CURRENT_CONFIG.get("REDIS_SERVER_PORT") if CURRENT_CONFIG.get(
"REDIS_SERVER_PORT") else 6379,
password=CURRENT_CONFIG.get("REDIS_SERVER_PWD") if CURRENT_CONFIG.get(
"REDIS_SERVER_PWD") else None,
db=CURRENT_CONFIG.get('REDIS_SERVER_DB') if CURRENT_CONFIG.get('REDIS_SERVER_DB') else 0,
max_connections=100,
)
# 集群
class RedisCluster(object):
"""
redis集群连接
"""
def __init__(self, conn_list=None, password=None):
"""
:param conn_list: 集群节点host
:param password: 集群连接密码
"""
self.conn_list = conn_list
self.password = password
def connect(self):
"""
连接redis集群
:return: conn,err
"""
try:
# 非密码连接redis集群
# redis_conn = StrictRedisCluster(startup_nodes=self.conn_list)
# 使用密码连接redis集群
redis_conn = StrictRedisCluster(startup_nodes=self.conn_list,
password=self.password,
decode_responses=True,
skip_full_coverage_check=True)
return redis_conn, None
except Exception as e:
err = "连接redis集群失败,错误信息:%s" % e
return False, err
人生苦短,我用python!
标签:
每日进步一点点
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
2020-09-14 有趣的python- 为视频加水印