python aioredis.exceptions.ConnectionError: Connection closed by server

python aioredis.exceptions.ConnectionError: Connection closed by server

背景

写了一个缓存的装饰器,用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值小于您环境中的空闲超时值
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值