RedisJSON如何使用JSON.MGET一次性获取多个key的完整JSON值
你使用的JSON.MGET k1 k2 .语法本身是RedisJSON批量查询多Key同路径JSON值的标准写法,出现仅返回单条结果的问题,通常是由于你使用的RedisJSON插件版本低于2.0导致的,1.x版本的RedisJSON对JSON.MGET的多Key支持存在兼容性缺陷。
方案1:升级RedisJSON到2.0及以上版本
升级完成后直接执行你之前写的命令即可得到预期结果:
redis-cli-1234> json.mget k1 k2 . 1) "{\"a\":\"a\"}" 2) "{\"b\":\"b\"}"
方案2:使用Redis事务实现(无需升级版本)
如果暂时无法升级插件,可以通过事务批量执行JSON.GET命令,单次请求即可拿到全部结果:
redis-cli-1234> MULTI OK redis-cli-1234> JSON.GET k1 . QUEUED redis-cli-1234> JSON.GET k2 . QUEUED redis-cli-1234> EXEC 1) "{\"a\":\"a\"}" 2) "{\"b\":\"b\"}"
方案3:使用Lua脚本实现(性能更优)
如果查询的Key数量较多,推荐使用Lua脚本减少网络IO开销,性能比事务方案更高:
redis-cli-1234> EVAL "local res = {} for i, key in ipairs(KEYS) do res[i] = redis.call('JSON.GET', key, '.') end return res" 2 k1 k2 1) "{\"a\":\"a\"}" 2) "{\"b\":\"b\"}"
内容的提问来源于stack exchange,提问作者orcaman
相关产品推荐
相关产品推荐

