Jug*_*aut 5 python asynchronous redis python-asyncio
我是 Redis 的新手,想知道是否有办法await get通过它的键来ing 值,直到键存在。最小代码:
async def handler():
data = await self._fetch(key)
async def _fetch(key):
return self.redis_connection.get(key)
Run Code Online (Sandbox Code Playgroud)
如您所知,如果这样key不存在,那return就是None. 但是由于在我的项目中,setredis 的键值对发生在另一个应用程序中,我希望 redis_connectionget方法阻塞直到键存在。这样的期待真的有效吗?
如果不在客户端上实现某种轮询redis GET,就不可能完成您想要做的事情。在这种情况下,您的客户将不得不执行以下操作:
async def _fetch(key):
val = self.redis_connection.get(key)
while val is None:
# Sleep and retry here
asyncio.sleep(1)
val = self.redis_connection.get(key)
return val
Run Code Online (Sandbox Code Playgroud)
不过,我要求您完全重新考虑解决此问题所使用的模式。在我看来,你需要做类似 Pub/Sub https://redis.io/topics/pubsub的事情。
因此,执行SET的应用程序成为发布者,而执行GET并等待密钥可用的应用程序成为订阅者。
我对此做了一些研究,看起来你可以使用 asyncio_redis 来做到这一点:
发件人(发布者): https: //github.com/jonathanslenders/asyncio-redis/blob/b20d4050ca96338a129b30370cfaa22cc7ce3886/examples/pubsub/sender.py
希望这可以帮助。
| 归档时间: |
|
| 查看次数: |
6179 次 |
| 最近记录: |