php redis扩展没有介绍向list中一次性push多个值的用法,但其实lPush和rPush是支持push多个值的,文档中有介绍
lPush - Prepend one or multiple values to a list
rPush - Append one or multiple values to a list
用法也很简单,看示例代码:
<?php
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->del('foo');
var_dump($redis->lPush('foo', 'aaaa', 'bbbb', 'cccc', 'dddd'));
print_r($redis->lRange('foo', 0, -1));
运行结果:
int(4)
Array
(
[0] => dddd
[1] => cccc
[2] => bbbb
[3] => aaaa
)
但更多时候我们是希望lPush一个数组,但lPush不支持直接传入数组,但我们可以使用以下两种方式来实现:
-
- 利用 call_user_func_array 可以使用数组来当参数列表的特性:
<?php
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->del('foo');
var_dump(call_user_func_array([$redis, 'lPush'], ['foo', '1111', '2222', '3333', '4444']));
print_r($redis->lRange('foo', 0, -1));
执行结果
int(4)
Array
(
[0] => 4444
[1] => 3333
[2] => 2222
[3] => 1111
)
2. 使用 php5.6+ 支持的可变参数,在数组前加 '...' 实现把数组当作函数的参数列表You can also use ... when calling functions to unpack an array or Traversable variable or literal into the argument list:
<?php
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->del('foo');
var_dump($redis->lPush('foo', ...['AAAA111', 'BBBB222', 'CCCC333', 'DDDD444']));
print_r($redis->lRange('foo', 0, -1));
运行返回
int(4)
Array
(
[0] => DDDD444
[1] => CCCC333
[2] => BBBB222
[3] => AAAA111
)
一般推荐第二种方式