## 列表
> 建議使用 Redis 列表之前先學習數據結構鏈表
頭元素和尾元素:頭元素指的是列表左端/前端第一個元素,尾元素指的是列表右端/后端第一個元素。列表 list包含三個元素:\[a,b,c,d,e\] 其中 a 是頭元素,而 e 則是尾元素。
空列表:指不包含任何元素的列表,Redis 將不存在的 key 也視為空列表。
### 列表操作
~~~
<?php
$redis = new \Redis();
$redis->connect('127.0.0.1', 6379);
// Redis 沒設置密碼則不需要這行代碼
// $redis->auth('password');
// 向隊列左側加入元素
$redis->lPush('lists', 'X');
// 向隊列右側加入元素
$redis->rPush('lists', 'Z');
//將一個插入已存在的列表頭部,列表不存在時操作無效
$redis->rPushx("key1","1");
// 將索引為1的數據修改為 Y
$redis->lSet('lists', 1, 'Y');
// 獲取 list 長度
$length = $redis->lLen('lists');
echo $length;
// 遍歷 list
$lists = $redis->lRange('lists', 0, $length - 1);
dump($lists);
// 從左側出隊一個元素(獲取并刪除)
$x = $redis->lPop('lists');
echo $x . PHP_EOL;
// 從右側出隊一個元素(獲取并刪除)
$z = $redis->rPop('lists');
echo $z . PHP_EOL;
// 獲取左側第一個元素
$y = $redis->lGet('lists', 0);
echo $y . PHP_EOL;
//刪除并或取列表的第一個元素,如果沒有元素則會阻塞直到等待超時
$redis->blPop('asd', 10);
//刪除并或取列表的最后一個元素,如果沒有元素則會阻塞直到等待超時
$ret = $redis->brPop('asd', 10);
//移除列表key1中最后一個元素,將其插入另一個列表asd頭部,并返回這個元素。若源列表沒有元素則返回false
$redis->rpoplpush('key1', 'asd');
//移除列表key1中最后一個元素,將其插入另一個列表asd頭部,并返回這個元素。如果列表沒有元素則會阻塞列表直到超時,超時返回false。
$ret = $redis->brpoplpush('key1', 'asd', 10);
//通過索引修改列表中元素的值,如果沒有該索引,則返回false。
$redis->lSet('key1', 2, '1');
//在列表key1中指定元素six前面或后面插入元素。若指定元素不在列表中,或列表不存在時,不執行任何操作
//Redis::AFTER插入元素后面 Redis::BEFORE插入元素前面
//返回值:插入成功返回插入后列表元素個數,若key1不存在返回0,若key1不是列表返回false
$redis->lInsert('key1', Redis::BEFORE, 'one', '1');
//根據第三個參數(count),刪除掉相對的value
//count > 0 : 從表頭開始向表尾搜索,移除與value相等的元素,數量為count。
//count < 0 : 從表尾開始向表頭搜索,移除與value相等的元素,數量為count的絕對值。
//count = 0 : 移除表中所有與value相等的值。
//返回實際刪除元素個數
$redis->lrem('key1', '1', -2);
//對一個列表進行截取,只保留指定區間 (如:下標1到10) 的元素,其他元素都刪除。成功返回true。
$redis->ltrim('key1', 1, 10);
// 刪除隊列
$redis->del('lists');
~~~
以上文章來源:看云手冊《當 Redis 遇上 ThinkPHP5》