小编典典

重做块直到密钥存在

redis

我是Redis的新手,我想知道是否有一种方法可以await get通过键的值来获取值,直到键存在为止。最小代码:

async def handler():
    data = await self._fetch(key)

async def _fetch(key):
    return self.redis_connection.get(key)

如你所知,如果这种key犯规存在,它returnNone。但是由于在我的项目中,将set键值对与redis绑定发生在另一个应用程序中,因此我希望redis_connection
get方法能够阻止直到key存在。这样的期望是否有效?


阅读 229

收藏
2020-06-20

共1个答案

小编典典

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

希望这可以帮助。

2020-06-20