为此,我使用了PHPRedis。
我需要创建脚本,将模式mobile*的所有键从一个Redis host1复制到host2。
通过从host1中选择带有模式mobile*的所有键,我就可以做到这一点。然后使用get key方法循环遍历每个密钥以返回数据。然后使用host2方法为set设置键:
$auKeys = $redis->keys("mobile*");
foreach ($auKeys as $key) {
$data = $redis->get($key);
$redis2->set($key, $data, 6000);
echo $key;
}问题是,这需要大约5分钟-我需要把它降低到2-3分钟。还有别的办法吗?
发布于 2016-04-01 14:23:21
为了获得更好的性能,通往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协议的不同方法,也会有一些库。
发布于 2016-04-04 11:19:45
通常,最好避免生产代码中的键。最好修改写入键的应用程序,在可能的情况下,保存正在使用的键列表,或者使用更新的扫描操作。
在这种情况下,您发现密钥并不需要很长时间(当您有很大的密钥空间时,密钥的数量会随着时间的增长而增加吗?),所以性能缓慢是由于所有的网络往返。一次一次。管道确实是一种将操作分组以避免往返的好方法。
在这种情况下,我建议使用MGET获取一个网络op中的所有值,而MSET在一个网络op中更新它们。
https://stackoverflow.com/questions/36357184
复制相似问题