当前位置: 首页 > 工具软件 > aioredis > 使用案例 >

python aioredis.exceptions.ConnectionError: Connection closed by server

羊舌墨一
2023-12-01

背景

写了一个缓存的装饰器,用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)
  • ps: health_check_interval设置时,应该确保health_check_interval值小于您环境中的空闲超时值
 类似资料:

相关阅读

相关文章

相关问答