写了一个缓存的装饰器,用redis做缓存,
由于是异步的,因此使用的是aioredis
模块,发现当被装饰的函数运行实际超过3秒,就会报以下错误
File "D:\Envs\p\lib\site-packages\aioredis\client.py", line 1085, in execute_command
return await self.parse_response(conn, command_name, **options)
File "D:\Envs\p\lib\site-packages\aioredis\client.py", line 1101, in parse_response
response = await connection.read_response()
File "D:\Envs\p\lib\site-packages\aioredis\connection.py", line 900, in read_response
response = await self._parser.read_response()
File "D:\Envs\p\lib\site-packages\aioredis\connection.py", line 399, in read_response
raw = await self._buffer.readline()
File "D:\Envs\p\lib\site-packages\aioredis\connection.py", line 327, in readline
await self._read_from_socket()
File "D:\Envs\p\lib\site-packages\aioredis\connection.py", line 270, in _read_from_socket
raise ConnectionError(SERVER_CLOSED_CONNECTION_ERROR)
aioredis.exceptions.ConnectionError: Connection closed by server.
看样子是服务器关闭连接,
参考 https://github.com/redis/redis-py/issues/1186 得到了解决方案
在连接中设置health_check_interval
参数,如下
async def connect(self) -> None:
self.pool = await aioredis.from_url(self._redis_dsn, decode_responses=True, health_check_interval=1 , **self._options)