Redis非常实用,再很多场景中使用
hash结构在redis更是使用频繁
经常会有增加、删除、批量删除、自增等操作
这里就大概讲解一下如何批量删除hash 数据
比如有如下数据:
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,代码效率也会提升