我在Redis上有一个队列 - 每天大约有1亿个插页。 Redis插入行很好 - 快速有效地工作。
但是当我尝试删除行时 - 是问题!
我的PHP代码部分:
$limit = 100000;
for ($ i = 1; $ i <= $ limit; $ i++) {
$ line = $ redis-> lPop ('my_list');
}
它的作品,但删除非常非常慢。 100K记录= 100s。
如何加快这个过程?
答案 0 :(得分:0)
该代码片段的第一个问题是它循环并独立发送每个LPOP。尝试使用流水线技术,我相信你会看到性能的明显提升。
然而,对您的问题更好的解决方案是使用Redis'LREM命令,基本上可以执行您想要的操作:)
答案 1 :(得分:0)
如果不关心交易,你可以试试MULTI PIPELINE。
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$pipe = $redis->multi(Redis::PIPELINE);
for($i = 0; $i < 100000; $i++){
$pipe->lPop("key");
}
$pipe->exec();