首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用PHP从Redis中选择特定模式的所有关键数据

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

Stack Overflow用户
提问于 2016-04-01 13:06:49
回答 2查看 1.2K关注 0票数 0

为此,我使用了PHPRedis

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

通过从host1中选择带有模式mobile*的所有键,我就可以做到这一点。然后使用get key方法循环遍历每个密钥以返回数据。然后使用host2方法为set设置键:

代码语言:javascript
复制
$auKeys = $redis->keys("mobile*");
foreach ($auKeys as $key) {
    $data = $redis->get($key);
    $redis2->set($key, $data, 6000);
    echo $key;
}

问题是,这需要大约5分钟-我需要把它降低到2-3分钟。还有别的办法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-01 14:23:21

为了获得更好的性能,通往SET的最简单的路径是将密钥放在PIPE上,然后点击redis服务器一次来执行所有这些密钥,而不是一个trip/key。

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

代码语言:javascript
复制
$pipeline = $redis->multi($host, Redis::PIPELINE);

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

$ret = $pipeline->exec();

同时,如果您正在寻找一种将命令传输到Redis协议的不同方法,也会有一些库。

使用-管道进行批量进口

票数 1
EN

Stack Overflow用户

发布于 2016-04-04 11:19:45

通常,最好避免生产代码中的键。最好修改写入键的应用程序,在可能的情况下,保存正在使用的键列表,或者使用更新的扫描操作。

在这种情况下,您发现密钥并不需要很长时间(当您有很大的密钥空间时,密钥的数量会随着时间的增长而增加吗?),所以性能缓慢是由于所有的网络往返。一次一次。管道确实是一种将操作分组以避免往返的好方法。

在这种情况下,我建议使用MGET获取一个网络op中的所有值,而MSET在一个网络op中更新它们。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36357184

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档