Redis之link 鏈表結構命令詳解

lpush key value

作用: 把值插入到鏈表(左邊)頭部

<?php
# 將數據一一加入到列表中
$redis->lpush('today_cost', 30);
$redis->lpush('today_cost', 1.5);
$redis->lpush('today_cost', 10);
$redis->lpush('today_cost', 8);
//array(8,10,1.5,30)

rpop key

作用: 返回並刪除鏈表尾元素

<?php
$redis->rpop('today_cost');//30

rpush key value

作用: 把值插入到鏈表(右邊)尾部

<?php
$redis->rpush('today_cost',70);//70

lpop key 不解釋

作用: 返回並刪除鏈表(左邊)頭部

<?php
$redis->lpop('today_cost');
//array(10,1.5,30)

lrange key start stop

作用: 返回鏈表中[start ,stop]中的元素
規律: 左數從0開始,右數從-1開始

如果start下標比列表的最大下標end(LLEN list減去1)還要大,或者start > stop,LRANGE返回一個空列表。

如果stop下標比end下標還要大,Redis將stop的值設置爲end。

<?php
$redis->lrange('today_cost',0,-1);
//array(8,10,1.5,30)

lrem key count value

作用: 從key鏈表中刪除 value值
注: 刪除count的絕對值個value後結束
Count > 0 從表頭刪除
Count < 0 從表尾刪除

<?php
$redis->lPush('key1', 'A');
$redis->lPush('key1', 'B');
$redis->lPush('key1', 'C');
$redis->lPush('key1', 'A');
$redis->lPush('key1', 'A');

$redis->lRange('key1', 0, -1);// array('A', 'A', 'C', 'B', 'A')
$redis->lRem('key1', 'A', 2); // 2
$redis->lRange('key1', 0, -1);// array('C', 'B', 'A')

ltrim key start stop

作用: 剪切key對應的鏈接,切[start,stop]一段,並把該段重新賦給key

<?php
$redis->rPush('key1', 'A');
$redis->rPush('key1', 'B');
$redis->rPush('key1', 'C');
$redis->lRange('key1', 0, -1); // array('A', 'B', 'C')
$redis->lTrim('key1', 0, 1);
$redis->lRange('key1', 0, -1); // array('A', 'B')

lindex key index

作用: 返回index索引上的值,
如 lindex key 2

<?php
$redis->rPush('key1', 'A');
$redis->rPush('key1', 'B');
$redis->rPush('key1', 'C');  // key1 => [ 'A', 'B', 'C' ]
$redis->lGet('key1', 0);     // 'A'
$redis->lGet('key1', -1);    // 'C'
$redis->lGet('key1', 10);    // `FALSE`

llen key

作用:計算鏈接表的元素個數
redis 127.0.0.1:6379> llen task
(integer) 3

<?php
$redis->rPush('key1', 'A');
$redis->rPush('key1', 'B');
$redis->rPush('key1', 'C');  // key1 => [ 'A', 'B', 'C' ]
$redis->lLen('key1');       // 3
$redis->rPop('key1');
$redis->lLen('key1');       // 2

linsert key after|before search value

作用: 在key鏈表中尋找’search’,並在search值之前|之後,.插入value
注: 一旦找到一個search後,命令就結束了,因此不會插入多個value

<?php
$redis->delete('key1');
$redis->lInsert('key1', Redis::AFTER, 'A', 'X');     // 0

$redis->lPush('key1', 'A');
$redis->lPush('key1', 'B');
$redis->lPush('key1', 'C');

$redis->lInsert('key1', Redis::BEFORE, 'C', 'X');    // 4
$redis->lRange('key1', 0, -1);                       // array('A', 'B', 'X', 'C')

$redis->lInsert('key1', Redis::AFTER, 'C', 'Y');     // 5
$redis->lRange('key1', 0, -1);                       // array('A', 'B', 'X', 'C', 'Y')

$redis->lInsert('key1', Redis::AFTER, 'W', 'value'); // -1

rpoplpush source dest

作用: 把source的尾部拿出,放在dest的頭部,
並返回 該單元值

例:

<?php
$redis->delete('x', 'y');

$redis->lPush('x', 'abc');
$redis->lPush('x', 'def');
$redis->lPush('y', '123');
$redis->lPush('y', '456');

// move the last of x to the front of y.
var_dump($redis->rpoplpush('x', 'y'));//string(3) "abc"
var_dump($redis->lRange('x', 0, -1)); //array(1) {[0]=> string(3) "def"}
var_dump($redis->lRange('y', 0, -1));//array(3) {[0]=> string(3) "abc" [1]=>string(3) "456" [2]=>string(3) "123"}

brpop,blpop key timeout

作用:等待彈出key的尾/頭元素,
Timeout爲等待超時時間
如果timeout爲0,則一直等待

場景: 長輪詢Ajax,在線聊天時,能夠用到

<?php
// Non blocking feature
$redis->lPush('key1', 'A');
$redis->delete('key2');

$redis->blPop('key1', 'key2', 10); // array('key1', 'A')
$redis->blPop(array('key1', 'key2'), 10); // array('key1', 'A')
$redis->brPop('key1', 'key2', 10); // array('key1', 'A')
$redis->brPop(array('key1', 'key2'), 10); // array('key1', 'A')

// Blocking feature

// process 1
$redis->delete('key1');
$redis->blPop('key1', 10);// 阻斷10秒

// process 2
$redis->lPush('key1', 'A');

// process 1
// array('key1', 'A') is returned
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章