redis 阻塞直到键存在

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方法阻塞直到键存在。这样的期待真的有效吗?

and*_*fsp 7

如果不在客户端上实现某种轮询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 来做到这一点:

希望这可以帮助。