gpt4 book ai didi

c++ - Bredis 0.07 - 发送具有多个条目的 HMSET 命令

转载 作者:IT王子 更新时间:2023-10-29 06:16:24 26 4
gpt4 key购买 nike

试图找出发送具有大量(可能是 2000 对)HMSET 命令的最佳方法。

我目前正在为每个成对 block 创建一个字符串,设置为“键“值””。这是最好的方法,还是每个都作为 single_command_t 的参数,或者作为迭代器,后面是命令、键和所有值对? @伊万白大口

 modbusResponseCommands.emplace_back(bredis::single_command_t("MULTI"));
...
for (int j = 0; j < data._readCoilsResponses.size(); ++j) {
int regId = data._readCoilsResponses[j].first;
int regValue = data._readCoilsResponses[j].second;

dataStr += std::to_string(regId) + '"';
dataStr += std::to_string(regValue) + '"';
dataStr += " ";
if (j != 0 && j % 2000 == 0) {
modbusResponseCommands.emplace_back(
bredis::single_command_t(
"HMSET",
_key + ":rcres:unitId:" + std::to_string(unit.first),
dataStr
)
);
dataStr = "";
}
}
modbusResponseCommands.emplace_back(
bredis::single_command_t(
"HMSET",
_key + ":rcres:unitId:" + std::to_string(unit.first),
dataStr
)
);
...
modbusResponseCommands.emplace_back(bredis::single_command_t("EXEC"));
...

最佳答案

你不需要MULTI,因为HMSET已经同时支持多个键/值。

using pair_t = std::pair<std::string, std::string>;
using holder_t = std::vector<pair_t>;
holder_t holder;
std::vector<std::pair<int, int>> _readCoilsResponses;
r::single_command_t cmd{"HMSET"};
for (int j = 0; j < _readCoilsResponses.size(); ++j) {
int regId = _readCoilsResponses[j].first;
int regValue = _readCoilsResponses[j].second;
holder.emplace_back(std::to_string(regId), std::to_string(regValue));
auto& last_pair = holder.back();
cmd.arguments.emplace_back(last_pair.first);
cmd.arguments.emplace_back(last_pair.second);
}

基本上 MULTI 应该与带有所有参数的 HMSET 具有相同的效果,但它会稍微增加 redis-server 的负载。

您可以省略 MULTI 并只发送一个 HMSET 命令列表,这些命令将以非原子方式执行,但这样您就可以为 redis-服务器;但如果您发送数兆字节的数据,那应该很重要。

关于c++ - Bredis 0.07 - 发送具有多个条目的 HMSET 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56246764/

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