php向redis list一次性lPush多個值


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));

運行結果:

[root@localhost php]# php lpush.php 
int(4)
Array
(
    [0] => dddd
    [1] => cccc
    [2] => bbbb
    [3] => aaaa
)
[root@localhost php]#

但更多時候我們是希望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));

執行結果:

[root@localhost php]# php lpush.php 
int(4)
Array
(
    [0] => 4444
    [1] => 3333
    [2] => 2222
    [3] => 1111
)
[root@localhost php]# 

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));

運行結果:

[root@localhost php]# php lpush.php 
int(4)
Array
(
    [0] => DDDD444
    [1] => CCCC333
    [2] => BBBB222
    [3] => AAAA111
)
[root@localhost php]#

一般推薦第二種方式,簡單明了

That‘s all


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM