使用单个redis连接(aioredis)

nwsw7zdq  于 2021-06-08  发布在  Redis
关注(0)|答案(0)|浏览(264)

我的应用程序每秒将通过redis发送数百条,甚至数千条消息,因此我们将在应用程序启动时打开连接,并在每个事务中使用该连接。我很难保持连接畅通。
下面是我的一些redis处理程序类:

  1. class RedisSingleDatabase(AsyncGetSetDatabase):
  2. async def redis(self):
  3. if not self._redis:
  4. self._redis = await aioredis.create_redis(('redis', REDIS_PORT))
  5. return self._redis
  6. def __init__(self):
  7. self._redis = None
  8. async def get(self, key):
  9. r = await self.redis()
  10. # r = await aioredis.create_redis(('redis', REDIS_PORT))
  11. print(f'CONNECTION IS {"CLOSED" if r.closed else "OPEN"}!')
  12. data = await r.get(key, encoding='utf-8')
  13. if data is not None:
  14. return json.loads(data)

这不管用。当我们打电话的时候 r.get ,连接已关闭( ConnectionClosedError ).
如果我取消注解 get 方法,并在方法中本地连接到数据库,它就工作了。但是我们不再使用相同的连接。
我也考虑过使用依赖注入来尝试这一切。这是一个 flask 应用程序,在我的 create_app 方法连接到数据库并构造 RedisSingleDatabase 有这种联系。除了我目前的问题是否会是同样的问题,我似乎无法让这种方法工作,因为我们需要 await 在我的根级别上不能做的连接 create_app 不能是异步的(除非我遗漏了什么)。
我试过了 asyncio.run 它要么无法解决问题,要么引发自身错误,无法从运行的事件循环调用它。
请帮忙!!!

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题