我是Redis的新手,我想知道是否有一种方法可以await get通过键的值来获取值,直到键存在为止。最小代码:
await
get
async def handler(): data = await self._fetch(key) async def _fetch(key): return self.redis_connection.get(key)
如你所知,如果这种key犯规存在,它return的None。但是由于在我的项目中,将set键值对与redis绑定发生在另一个应用程序中,因此我希望redis_connection get方法能够阻止直到key存在。这样的期望是否有效?
key
return
None
set
如果不在客户端上实现某种池化 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
但是,我要求您完全重新考虑您用于此问题的模式。在我看来,您需要执行诸如Pub / Sub https://redis.io/topics/pubsub之类的操作。
因此,执行 SET 的应用程序将成为发布者,而执行 GET 并等待密钥可用的应用程序将成为订阅者。
我对此进行了一些研究,看起来您可以使用asyncio_redis来做到这一点:
订阅者https://github.com/jonathanslenders/asyncio-redis/blob/b20d4050ca96338a129b30370cfaa22cc7ce3886/examples/pubsub/receiver.py。
发件人(发布者):https : //github.com/jonathanslenders/asyncio-redis/blob/b20d4050ca96338a129b30370cfaa22cc7ce3886/examples/pubsub/sender.py
希望这可以帮助。