12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- #!/usr/bin/env python3
- # -*- coding: utf-8 -*-
- import sys
- from redis.asyncio.client import Redis
- from redis.exceptions import AuthenticationError, TimeoutError
- from common.log import log
- from core.conf import settings
- class RedisCli(Redis):
- def __init__(self):
- super(RedisCli, self).__init__(
- host=settings.REDIS_HOST,
- port=settings.REDIS_PORT,
- password=settings.REDIS_PASSWORD,
- db=settings.REDIS_DATABASE,
- socket_timeout=settings.REDIS_TIMEOUT,
- decode_responses=True, # 转码 utf-8
- )
- async def open(self):
- """
- 触发初始化连接
- :return:
- """
- try:
- await self.ping()
- except TimeoutError:
- log.error('❌ 数据库 redis 连接超时')
- sys.exit()
- except AuthenticationError:
- log.error('❌ 数据库 redis 连接认证失败')
- sys.exit()
- except Exception as e:
- log.error('❌ 数据库 redis 连接异常 {}', e)
- sys.exit()
- async def delete_prefix(self, prefix: str, exclude: str | list = None):
- """
- 删除指定前缀的所有key
- :param prefix:
- :param exclude:
- :return:
- """
- keys = []
- async for key in self.scan_iter(match=f'{prefix}*'):
- if isinstance(exclude, str):
- if key != exclude:
- keys.append(key)
- elif isinstance(exclude, list):
- if key not in exclude:
- keys.append(key)
- else:
- keys.append(key)
- if keys:
- await self.delete(*keys)
- # 创建 redis 客户端实例
- redis_client = RedisCli()
|