php - 使用 PHP 从 Redis 中选择特定模式的所有关键数据

标签 php redis key keystore host

我正在使用 PHPRedis为此。

我需要创建脚本,将模式为 mobile* 的所有 key 从一个 Redis host1 复制到 host2

我通过从 host1 中选择所有具有模式 mobile* 的 key 来实现这一点。然后使用 get 键方法遍历每个键以返回数据。然后,我使用 set 方法为 host2 设置 key :

$auKeys = $redis->keys("mobile*");
foreach ($auKeys as $key) {
    $data = $redis->get($key);
    $redis2->set($key, $data, 6000);
    echo $key;
}

问题是这大约需要 5 分钟 - 我需要将其缩短到 2-3 分钟。还有其他方法吗?

最佳答案

SET 的最简单途径是PIPE 键并点击redis 服务器一次以执行所有它们,而不是一次旅行/键。

https://github.com/phpredis/phpredis/issues/251

$pipeline = $redis->multi($host, Redis::PIPELINE);

//put result in our shared list
foreach ($items as $item) {
  $pipeline->sAdd($key, $item);
}

$ret = $pipeline->exec();

与此同时,如果您正在寻找一种不同的方式将命令转换为 Redis Protocol,也可以使用库.

redis bulk import using --pipe

关于php - 使用 PHP 从 Redis 中选择特定模式的所有关键数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36357184/

相关文章:

redis - 什么可能会从 Redis 中删除键?

PHP重命名数组的键

Python:仅使用字典中的某些键进行for循环

php foreach 每 100 次 sleep 然后继续

php - Mysql : JOIN 2 table , 其中一项SUM不正确

elasticsearch - Logstash 在解析日志时报告 [0] _grokparsefailure

docker - redis.conf 在官方 docker 镜像中的位置是什么?

linux - 寻找一个非常简单的 Bash 脚本来自动按键

PHP_CodeSniffer 缺少 Zend 标准?

php - 在 PHP 中启用 Zend 多字节支持