1

我正在使用 aiocache @cached 装饰器来缓存 asyncio NATS 请求,但在将数据返回给客户端时遇到问题我的代码:

@cached(key="result", ttl=1000, cache=Cache.REDIS, serializer=JsonSerializer(), port=6379)
async def timed_nats_request(self, topic, msg, timeout=None):
    await asyncio.sleep(10)
    msg = json.dumps(msg)
    response = await self.nc.nc.timed_request(topic, msg.encode('utf-8'), timeout=20.0)
    result = json.loads(response.data)
    if 'result' in result:
        return result['result']
    else:
        return result

Aiocache 的 @cached 装饰器将我的消息缓存到 Redis 但不会将其返回给客户端,所以我的意思是我可以从 Redis db 中找到缓存的数据,但它不会通过函数 (timed_nats_request) 返回它

我的缓存配置:

caches.set_config({
    'default': {
        'cache': "aiocache.SimpleMemoryCache",
        'serializer': {
            'class': "aiocache.serializers.JsonSerializer"
        }
    },
    'redis_alt': {
        'cache': "aiocache.RedisCache",
        'endpoint': "127.0.0.1",
        'port': 6379,
        'timeout': 100,
        'serializer': {
            'class': "aiocache.serializers.JsonSerializer"
        },
        'plugins': [
            {'class': "aiocache.plugins.HitMissRatioPlugin"},
            {'class': "aiocache.plugins.TimingPlugin"}
        ]
    }
})

请帮帮我!

4

1 回答 1

0

最后我找到了解决方案:我总是使用相同的参数,所以我应该使用没有 key 参数的 key_builder 因为生成不同的密钥:)

于 2019-12-24T12:42:46.133 回答