Redis 提供了一种输入结构化 JSON 文档并按内容检索它们的方法(例如,这可以增强自动完成搜索体验)。所以我正在这样做,而且效果很好:
test = "{'key': 'glooler-61245', 'val': 'sighgh'}"
r.json().set("a:glooler-61245", Path.root_path(), ast.literal_eval(test))
rs.search(Query(f"glooler"))
Redis 还允许使用管道将许多插入流式传输到一起并在一大批中执行,如下所示:
pipe = r.pipeline()
pipe.set("a", "a value")
pipe.set("b", "b value")
pipe.execute()
pipe.get("a")
但是,管道允许用户仅通过键进行检索,这与 JSON 不同,在 JSON 中可以通过内容进行检索。我如何合并这两个,以便我可以像第一个示例一样推送 10k 结构化 JSON,然后一次性执行管道,然后能够按值检索?
我试过这个:
pipe.set('a:glooler-61246', "{'key': 'glooler-61246', 'val': 'loltest'}")
pipe.set('a:glooler-61247', "{'key': 'glooler-61247', 'val': 'loltest2'}")
pipe.set('a:glooler-61248', "{'key': 'glooler-61248', 'val': 'loltest3'}")
pipe.set('a:glooler-61249', "{'key': 'glooler-61249', 'val': 'loltest4'}")
pipe.execute()
但是,
rs.search(Query(f"glooler"))
仍然只返回我之前插入的第一个值。
我无法访问redis,但我对它有一些了解。您只需将值设置为字符串即可。您需要将它们设置为 json 文档。
试试这个,
pipe = r.pipeline()
pipe.set('a:glooler-61246', ast.literal_eval("{'key': 'glooler-61246', 'val': 'loltest'}"))
pipe.set('a:glooler-61247', ast.literal_eval("{'key': 'glooler-61247', 'val': 'loltest2'}"))
………
pipe.execute()
result = rs.search(Query(f"glooler"))
print(result)