小技巧篇:Redis如何再hash key 不确定个数批量删除

bloger 2021-07-30 AM 519℃ 0条

Redis非常实用,再很多场景中使用

hash结构在redis更是使用频繁

经常会有增加、删除、批量删除、自增等操作

这里就大概讲解一下如何批量删除hash 数据

src=http___img.php.cn_upload_article_000_000_032_5cf62a3a58f87710.png&refer=http___img.php.jpeg

比如有如下数据:


10.10.219.143:6379> hgetall Emoji:0d6348f70fa382011lJoWA
 1) "22"
 2) "s:101:\"newbackstageimg/uploads/2021-07-22/60f8e1470aeee.png\";"
 3) "30"
 4) "s:79:\"img_256805444_1627528851_2.gif\";"
 5) "29"
 6) "s:79:\"img_256805444_1627528811_1.gif\";"
 7) "33"
 8) "s:76:\"img_256805444_1627543866_1.png\";"
 9) "23"
10) "s:77:\"img_256805444_1627465146_1.jpeg\";"
11) "28"
12) "s:77:\"img_256806456_1627461256_1.jpeg\";"
10.10.219.143:6379> 

redis 有提供删除多个数据的方法,这都是在hash key 明确的情况下,比如要删除:30,29,33

$redis = new Redis();
$redis->connect('127.0.0.1', 6379);

$redis->hdel("Emoji:0d6348f70fa382011lJoWA",30,29,33);

如果redis重hash key 不明确的情况下,比如参数有客户端传递要如何删除?

1、使用foreach

$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$ids = [30,29,33];

foreach ($ids as $id) {
$redis->hdel('Emoji:0d6348f70fa382011lJoWA',$id)
}

2、使用call_user_func_array进行删除,代码如下

$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$ids = [30,29,33];
$set = ['Emoji:0d6348f70fa382011lJoWA'];
foreach ($ids as $id) array_push($set, $id);
call_user_func_array([$redis, 'hDel'], $set);

总结:虽然foreach,call_user_func_array都能过实现批量删除。但是foreach 需要对redis多次io,而使用call_user_func_array 只需要一次io,代码效率也会提升

标签: redis

非特殊说明,本博所有文章均为博主原创。

评论啦~