gpt4 book ai didi

join - webdis 服务器端加入

转载 作者:IT王子 更新时间:2023-10-29 06:15:43 33 4
gpt4 key购买 nike

首先,如果我的概念有误,请原谅,这对我来说有点陌生。我必须从 webdis 服务器检索一些对象。目前的做法是:

  1. 获取所有对象ids (serverUrl/ZRANGE/objects_index/-X/-1)
  2. 对于每个对象,获取属性(serverUrl/GET/attributeY_objectIdX)

因此,如果我有 X 个具有 Y 属性的对象,我必须执行 X * Y + 1 次 REST 调用才能获取所有数据,这似乎非常低效。

据我了解Multi是执行连接的命令,但 webdis rest api 不支持(参见想法,webdis 页面上的 TODO)。

是否有我缺少的更简单的解决方案?

我应该重新组织数据的存储方式吗?

我可以使用 websockets 通过 json 发送 MULTI/EXEC 命令吗:

jsonSocket.send(JSON.stringify(["MULTI", "EXEC", "GET", "etc..."]));

最佳答案

首先,您应该考虑使用散列对象,而不是每个属性一个键,这样您每个对象都有一个键,与多个属性相关联。好处是您可以使用 HGETALL 命令一次检索给定对象的所有属性。您没有 X*Y+1 个调用,而是只有 X+1 个调用。

代替:

SET user:1:name    Didier
SET user:1:age 41
SET user:1:country FR

你可以:

HMSET user:1 name Didier age 41 country FR

然后,webdis 支持 HTTP 1.1 和 websocket 流水线,Redis 服务器使用自己的协议(protocol)支持流水线。因此应该可以向 webdis 发送多个命令,等待结果(将以相同的顺序返回),同时只需支付单次往返费用。

例如,webdis 页面上提供的 websocket 示例实际上执行一次往返以执行两个命令:

var jsonSocket = new WebSocket("ws://127.0.0.1:7379/.json");
jsonSocket.onopen = function() {

console.log("JSON socket connected!");
jsonSocket.send(JSON.stringify(["SET", "hello", "world"]));
jsonSocket.send(JSON.stringify(["GET", "hello"]));
};
jsonSocket.onmessage = function(messageEvent) {
console.log("JSON received:", messageEvent.data);
};

您可以做类似的事情,并聚合多个 HGETALL 命令以按批处理的 n 个对象检索数据。

请注意,对于 Redis 本身(即没有 webdis),我可能会推荐相同的策略(流水线化 HGETALL 命令)。

关于join - webdis 服务器端加入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18208206/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com