Select 使用 PHP 来自 Redis 的特定模式的所有关键数据
Select all key data for a specific pattern from Redis using PHP
我正在为此使用 PHPRedis。
我需要创建脚本,将模式为 mobile*
的所有键从一个 Redis host1 复制到 host2 .
我通过从 host1 中选择具有模式 mobile*
的所有键来完成此工作。然后使用 get
键方法遍历每个键以 return 数据。然后我使用 set
方法为 host2 设置密钥:
$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 服务器一次以执行所有这些键,而不是 trip/key 。
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
通常,最好避免在生产代码中使用 KEYS。最好修改写入密钥的应用程序,尽可能保留正在使用的密钥列表,或者使用更新的 SCAN 操作。
在这种情况下,您透露 KEYS 并没有花费很长时间(当您有一个非常大的密钥 space 时,密钥的数量会随着时间增加吗?),所以性能很慢是由于所有网络往返。每个 GET 一个。管道确实是将操作分组以避免往返的好方法。
在这种情况下,我建议使用 MGET 在一个网络操作中获取所有值,并使用 MSET 在一个网络操作中更新它们。
我正在为此使用 PHPRedis。
我需要创建脚本,将模式为 mobile*
的所有键从一个 Redis host1 复制到 host2 .
我通过从 host1 中选择具有模式 mobile*
的所有键来完成此工作。然后使用 get
键方法遍历每个键以 return 数据。然后我使用 set
方法为 host2 设置密钥:
$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 服务器一次以执行所有这些键,而不是 trip/key 。
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
通常,最好避免在生产代码中使用 KEYS。最好修改写入密钥的应用程序,尽可能保留正在使用的密钥列表,或者使用更新的 SCAN 操作。
在这种情况下,您透露 KEYS 并没有花费很长时间(当您有一个非常大的密钥 space 时,密钥的数量会随着时间增加吗?),所以性能很慢是由于所有网络往返。每个 GET 一个。管道确实是将操作分组以避免往返的好方法。
在这种情况下,我建议使用 MGET 在一个网络操作中获取所有值,并使用 MSET 在一个网络操作中更新它们。