2022-11-04 17:37:08 +08:00
|
|
|
|
"""
|
|
|
|
|
redis 配置类
|
|
|
|
|
"""
|
|
|
|
|
import sys
|
|
|
|
|
|
|
|
|
|
import redis
|
|
|
|
|
|
2022-11-08 10:02:42 +08:00
|
|
|
|
from configs import default
|
2022-11-04 17:37:08 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class RedisCli(object):
|
|
|
|
|
|
|
|
|
|
def __init__(self, *, host: str, port: str, password: str, db: int, socket_timeout=5):
|
|
|
|
|
# redis对象,在 @app.on_event('startup') 中连接创建
|
|
|
|
|
self._redis_client = None
|
|
|
|
|
self.host = host
|
|
|
|
|
self.port = port
|
|
|
|
|
self.password = password
|
|
|
|
|
self.db = db
|
|
|
|
|
self.socket_timeout = socket_timeout
|
|
|
|
|
|
|
|
|
|
def init_redis_connect(self) -> None:
|
|
|
|
|
"""
|
|
|
|
|
初始化链接
|
|
|
|
|
:return:
|
|
|
|
|
"""
|
|
|
|
|
try:
|
|
|
|
|
r = redis.ConnectionPool(
|
|
|
|
|
host=self.host,
|
|
|
|
|
port=self.port,
|
|
|
|
|
password=self.password,
|
|
|
|
|
db=self.db,
|
|
|
|
|
socket_timeout=self.socket_timeout,
|
|
|
|
|
decode_responses=True # 解码
|
|
|
|
|
)
|
|
|
|
|
self._redis_client = redis.StrictRedis(connection_pool=r)
|
|
|
|
|
if not self._redis_client.ping():
|
|
|
|
|
print('连接超时')
|
|
|
|
|
sys.exit()
|
|
|
|
|
except (redis.AuthenticationError, Exception) as e:
|
|
|
|
|
print('连接redis异常')
|
|
|
|
|
sys.exit()
|
|
|
|
|
|
|
|
|
|
def get_redis(self):
|
|
|
|
|
return self._redis_client
|
|
|
|
|
|
|
|
|
|
# 使实例化后的对象,赋予redis对象的方法和属性
|
|
|
|
|
def __getattr__(self, item):
|
|
|
|
|
return self._redis_client.has_key(item)
|
|
|
|
|
|
|
|
|
|
def __getitem__(self, item):
|
|
|
|
|
return self._redis_client[item]
|
|
|
|
|
|
|
|
|
|
def __setitem__(self, key, value):
|
|
|
|
|
self._redis_client[key] = value
|
|
|
|
|
|
|
|
|
|
def __delitem__(self, key):
|
|
|
|
|
del self._redis_client[key]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
redis_client = RedisCli(
|
|
|
|
|
host=default.db['host'],
|
|
|
|
|
port=default.db['port'],
|
|
|
|
|
password=default.db['password'],
|
|
|
|
|
db=default.db['db'],
|
|
|
|
|
)
|