$rdb = new \Redis();
$rdb->pconnect(env('REDIS_HOST'), env('REDIS_PORT'), 60);
$rdb->auth(env('REDIS_PASSWORD'));
$rdb->select(1);
$data = [
'member1' => 10,
'member2' => 20,
'member3' => 30,
];
$res=$rdb->rawCommand('ZADD', 'myzset', ...array_merge(...array_map(function ($member, $score) {
return [$score, $member];
}, array_keys($data), array_values($data))));
dd($res);
csdn 上也有ChatGPT功能了,哈哈哈
方法一:可以使用zAdd
命令的变体来批量插入:
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$data = [
'member1' => 10,
'member2' => 20,
'member3' => 30,
];
$redis->rawCommand('ZADD', 'myzset', ...array_merge(...array_map(function ($member, $score) {
return [$score, $member];
}, array_keys($data), array_values($data))));
这里,我们使用了rawCommand
方法来执行ZADD
命令,因为它的参数需要动态地构建。我们使用了array_map
函数来将$data
数组中的成员和分数转换为ZADD
命令所需的参数形式,然后使用array_merge
将这些参数合并为一个扁平的数组,最后将其展开为rawCommand
的参数列表。
方法二、使用事务
$rdb = new \Redis();
$rdb->pconnect(env('REDIS_HOST'), env('REDIS_PORT'), 60);
$rdb->auth(env('REDIS_PASSWORD'));
$rdb->select(1);
$rdb->watch('Myset22');
$rdb->multi();
foreach ($scoreValues as $key => $value) {
$res22 = $rdb->zAdd('Myset22', $value, $key);
}
$re31=$rdb->exec();
dd($res22,$re31);