c++ - Bredis 0.07 - 发送带有多个条目的 HMSET 命令
问题描述
试图找出发送大(可能 2000 对)的 HMSET 命令的最佳方式。
我目前正在做的是为每个对块创建一个字符串,设置为'key“value”'。这是最好的方法,还是每个都作为 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-server 喘口气了;但如果您发送兆字节的数据,这应该很重要。
推荐阅读
- azure-devops - Azure DevOps Databricks Pipeline Release 退出并出现 [错误]Bash 退出并出现代码“1”
- javascript - 以角度填充数据下拉onclick表格行(基于表格行数据)
- mongodb - MongoDB Redash - FieldPath 字段名称可能不包含“。”
- sql - 在 Laravel 6 中使用 sql 查询统计每个部门的工人数
- ios - 在选项卡之间移动时如何保留推送视图?
- powershell - 如何通过 PowerShell 或 Graph API 在 Micosoft Teams 中设置成员设置“允许成员上传自定义应用程序”
- lstm - 带手套的 Bi-LSTM - 词形还原问题
- python - 如何基于包含时间戳的 csv 文件名加载数据帧
- r - 从去年到给定年份的外推行可用
- python - Python从字符串中的开头到第一个特定字符删除?