redis命令操作list和php語法對照

本文為我閱讀了** redis參考手冊 **之后編寫寄锐,注意 php_redis 和 redis-cli 的區(qū)別(主要是返回值類型和參數(shù)用法)

目錄:

序號 方法 說明 php
1 BLPOP key1 [key2 ] timeout 移出并獲取列表的第一個元素唉窃, 如果列表沒有元素會阻塞列表直到等待超時或發(fā)現(xiàn)可彈出元素為止贿讹。 $redis -> blPop('favorite_fruit',3)
2 BRPOP key1 [key2 ] timeout 移出并獲取列表的最后一個元素辛臊, 如果列表沒有元素會阻塞列表直到等待超時或發(fā)現(xiàn)可彈出元素為止谎柄。 $redis -> brPop('favorite_fruit',3)
3 BRPOPLPUSH source destination timeout 列表中彈出一個值液南,將彈出的元素插入到另外一個列表中并返回它踩麦; 如果列表沒有元素會阻塞列表直到等待超時或發(fā)現(xiàn)可彈出元素為止枚赡。 $redis -> brpoplpush('favorite_fruit','favorite_fruit',2)
4 LINDEX key index 通過索引獲取列表中的元素 $redis -> lIndex('favorite_fruit',2)
5 LINSERT key BEFORE|AFTER pivot value 在列表的元素前或者后插入元素 $redis -> lInsert('favorite_fruit','before','apple','Mango')
6 LLEN key 獲取列表長度 $redis -> lLen('favorite_fruit')
7 LPOP key 移出并獲取列表的第一個元素 $redis -> lPop('favorite_fruit')
8 LPUSH key value1 [value2] 將一個或多個值插入到列表頭部 $redis -> lPush('favorite_fruit','banana')
9 LPUSHX key value 將一個值插入到已存在的列表頭部 $redis -> lPushx('favorite_fruit','apple'));
10 LRANGE key start stop 獲取列表指定范圍內(nèi)的元素 $redis -> lRange('favorite_fruit',0,-1));
11 LREM key count value 移除列表元素 $redis -> lRem('favorite_fruit','apple',2)
12 LSET key index value 通過索引設(shè)置列表元素的值 $redis -> lSet('favorite_fruit','1','pineapple')
13 LTRIM key start stop 對一個列表進(jìn)行修剪(trim),就是說谓谦,讓列表只保留指定區(qū)間內(nèi)的元素贫橙,不在指定區(qū)間之內(nèi)的元素都將被刪除。 $redis -> lTrim('favorite_fruit',1,-1)
14 RPOP key 移除列表的最后一個元素反粥,返回值為移除的元素卢肃。 $redis -> rPop('favorite_fruit')
15 RPOPLPUSH source destination 移除列表的最后一個元素,并將該元素添加到另一個列表并返回 $redis -> rpoplpush('favorite_fruit','favorite_fruit')
16 RPUSH key value1 [value2] 在列表中添加一個或多個值 $redis -> rPush('favorite_fruit','cherry')
17 RPUSHX key value 為已存在的列表添加值 $redis -> rPushx('favorite_fruit','apple')

一才顿、List(列表)

1莫湘、LPUSH

Redis Lpush 命令將一個或多個值插入到列表頭部。 如果 key 不存在郑气,一個空列表會被創(chuàng)建并執(zhí)行 LPUSH 操作幅垮。 當(dāng) key 存在但不是列表類型時,返回一個錯誤尾组。(在Redis 2.4版本以前的 LPUSH 命令忙芒,都只接受單個 value 值。)

語法:

redis 127.0.0.1:6379> LPUSH KEY_NAME VALUE1.. VALUEN

返回值: 執(zhí)行 LPUSH 命令后讳侨,列表的長度呵萨。

可用版本: >= 1.0.0

時間復(fù)雜度:O(1)

具體實(shí)例:

<?php
$redis = new redis();
$redis -> connect('127.0.0.1',6379);
$redis -> flushAll();

var_dump($redis -> lPush('favorite_fruit','cherry'));     // key 不存在,創(chuàng)建一個新的列表, 返回 int 1
var_dump($redis -> lPush('favorite_fruit','banana'));     // key 存在跨跨。但是 list 類型, 返回 int 2

$redis -> set('pats','dog');
var_dump($redis -> lPush('pats','cat'));     // key 存在潮峦。但不是是 list 類型, 返回 boolean false

2、LPUSHX

Redis Lpushx 將一個或多個值插入到已存在的列表頭部勇婴,列表不存在時操作無效忱嘹。

語法:

redis 127.0.0.1:6379> LPUSHX KEY_NAME VALUE1.. VALUEN

返回值: LPUSHX 命令執(zhí)行之后,列表的長度耕渴。

可用版本: >= 2.2.0

時間復(fù)雜度:O(1)

具體實(shí)例:

<?php
$redis = new redis();
$redis -> connect('127.0.0.1',6379);
$redis -> flushAll();

var_dump($redis -> rPush('favorite_fruit','cherry'));
var_dump($redis -> rPush('favorite_fruit','banana'));
var_dump($redis -> lPushx('favorite_fruit','apple'));     //  返回 int 3
var_dump($redis -> lRange('favorite_fruit',0,-1));
//  array (size=3)
//      0 => string 'apple' (length=5)
//      1 => string 'cherry' (length=6)
//      2 => string 'banana' (length=6)

var_dump($redis -> lPushx('fake_key','invalid_val'));     //  列表不存在時操作無效返回 int (0)

3德谅、RPUSH

Redis Rpush 命令用于將一個或多個值插入到列表的尾部(最右邊)。如果列表不存在萨螺,一個空列表會被創(chuàng)建并執(zhí)行 RPUSH 操作窄做。 當(dāng)列表存在但不是列表類型時愧驱,返回一個錯誤。(注意:在 Redis 2.4 版本以前的 RPUSH 命令椭盏,都只接受單個 value 值)组砚。

語法:

redis 127.0.0.1:6379> RPUSH KEY_NAME VALUE1..VALUEN

返回值: 執(zhí)行 RPUSH 操作后,列表的長度掏颊。

可用版本: >= 1.0.0

時間復(fù)雜度:O(1)

具體實(shí)例:

<?php
$redis = new redis();
$redis -> connect('127.0.0.1',6379);
$redis -> flushAll();

var_dump($redis -> rPush('favorite_fruit','cherry'));     // key 不存在缭受,創(chuàng)建一個新的列表, 返回 int 1
var_dump($redis -> rPush('favorite_fruit','banana'));     // key 存在看锉。但是 list 類型, 返回 int 2

$redis -> set('pats','dog');
var_dump($redis -> rPush('pats','cat'));     // key 存在录平。但不是是 list 類型, 返回 boolean false

4讯私、RPUSHX

Redis Rpushx 命令用于將一個或多個值插入到已存在的列表尾部(最右邊)。如果列表不存在准浴,操作無效事扭。

語法:

redis 127.0.0.1:6379> RPUSHX KEY_NAME VALUE1..VALUEN

返回值:執(zhí)行 Rpushx 操作后,列表的長度乐横。

可用版本: >= 2.2.0

時間復(fù)雜度:O(1)

具體實(shí)例:

<?php
$redis = new redis();
$redis -> connect('127.0.0.1',6379);
$redis -> flushAll();

var_dump($redis -> lPush('favorite_fruit','cherry'));
var_dump($redis -> lPush('favorite_fruit','banana'));
var_dump($redis -> rPushx('favorite_fruit','apple'));     //  返回 int 3
var_dump($redis -> lRange('favorite_fruit',0,-1));
//  array (size=3)
//      0 => string 'banana' (length=6)
//      1 => string 'cherry' (length=6)
//      2 => string 'apple' (length=5)

var_dump($redis -> rPushx('fake_key','invalid_val'));     //  列表不存在時操作無效返回 int (0)

5求橄、LPOP

Redis Lpop 命令用于移除并返回列表的第一個元素。

語法:

redis 127.0.0.1:6379> LPOP KEY_NAME

返回值:列表的第一個元素葡公。 當(dāng)列表 key 不存在時罐农,返回 nil 。

可用版本:>= 1.0.0

時間復(fù)雜度:O(1)

具體實(shí)例:

<?php
$redis = new redis();
$redis -> connect('127.0.0.1',6379);
$redis -> flushAll();

var_dump($redis -> lPush('favorite_fruit','cherry'));
var_dump($redis -> lPush('favorite_fruit','banana'));
var_dump($redis -> lPush('favorite_fruit','apple'));
var_dump($redis -> lPop('favorite_fruit'));             // string apple
var_dump($redis -> lRange('favorite_fruit',0,-1));
//  array (size=2)
//      0 => string 'banana' (length=6)
//      1 => string 'cherry' (length=6)

6催什、RPOP

Redis Rpop 命令用于移除并返回列表的最后一個元素涵亏。

語法:

redis 127.0.0.1:6379> RPOP KEY_NAME

返回值:列表的最后一個元素。 當(dāng)列表不存在時蒲凶,返回 nil 气筋。

可用版本:>= 1.0.0

時間復(fù)雜度:O(1)

具體實(shí)例:

<?php
$redis = new redis();
$redis -> connect('127.0.0.1',6379);
$redis -> flushAll();

$redis -> lPush('favorite_fruit','cherry');
$redis -> lPush('favorite_fruit','banana');
$redis -> lPush('favorite_fruit','apple');
var_dump($redis -> rPop('favorite_fruit'));             // string cherry
var_dump($redis -> lRange('favorite_fruit',0,-1));
//  array (size=2)
//      0 => string 'apple' (length=5)
//      1 => string 'banana' (length=6)

7、BLPOP

Redis Blpop 命令移出并獲取列表的第一個元素豹爹, 如果列表沒有元素會阻塞列表直到等待超時或發(fā)現(xiàn)可彈出元素為止裆悄。

(1)當(dāng)給定多個key參數(shù)時矛纹,按參數(shù)key的先后順序依次檢查各個列表臂聋,彈出第一個非空列表的頭元素。
  』蚰稀(2)超時參數(shù)timeout接受一個以秒為單位的數(shù)字作為值孩等。超時參數(shù)設(shè)為0表示阻塞時間可以無限期延長

(3)在MULTI/EXEC事務(wù)中的BLPOP,行為表現(xiàn)得就像LPOP一樣采够,對空列表返回nil肄方,對非空列表彈出列表元素,不進(jìn)行任何阻塞操作蹬癌。

語法:

redis 127.0.0.1:6379> BLPOP LIST1 LIST2 .. LISTN TIMEOUT

返回值:如果列表為空权她,返回一個 nil 虹茶。 否則,返回一個含有兩個元素的列表隅要,第一個元素是被彈出元素所屬的 key 蝴罪,第二個元素是被彈出元素的值。

可用版本:>= 2.0.0

時間復(fù)雜度:O(1)

具體實(shí)例:

<?php
$redis = new redis();
$redis -> connect('127.0.0.1',6379);
$redis -> flushAll();

// This first case: 非阻塞行為步清,最少有一個非空列表
$redis -> lPush('favorite_fruit','cherry');
$redis -> lPush('favorite_fruit','banana');
$redis -> lPush('favorite_fruit','apple');

$redis -> lPush('pats','dog');
$redis -> lPush('pats','cat');
$redis -> lPush('pats','rabbit');

var_dump($redis -> blPop('favorite_fruit',3));
//  array (size=2)
//      0 => string 'favorite_fruit' (length=14)
//      1 => string 'apple' (length=5)

$array_blpop = array('favorite_fruit','pats');
var_dump($redis -> blPop($array_blpop,3));          // 優(yōu)先彈出第一個非空列表的頭元素
//  array (size=2)
//      0 => string 'favorite_fruit' (length=14)
//      1 => string 'banana' (length=6)

var_dump($redis -> lRange('favorite_fruit',0,-1));
//  array (size=1)
//      0 => string 'cherry' (length=6)

// This second case: 阻塞行為, 所有給定key都不存在或包含空列表
var_dump($redis -> blPop('fake_key',2));    // 阻塞鏈接要门, 2s 之后超時結(jié)束,返回 array (size=0) empty

8廓啊、BRPOP

Redis Brpop 命令移出并獲取列表的最后一個元素欢搜, 如果列表沒有元素會阻塞列表直到等待超時或發(fā)現(xiàn)可彈出元素為止。

(1)當(dāng)給定多個key參數(shù)時谴轮,按參數(shù)key的先后順序依次檢查各個列表炒瘟,彈出第一個非空列表的尾部元素。
  ∈榫邸(2)超時參數(shù)timeout接受一個以秒為單位的數(shù)字作為值唧领。超時參數(shù)設(shè)為0表示阻塞時間可以無限期延長

(3)在MULTI/EXEC事務(wù)中的BLPOP,行為表現(xiàn)得就像RPOP一樣雌续,對空列表返回nil斩个,對非空列表彈出列表元素,不進(jìn)行任何阻塞操作驯杜。

語法:

redis 127.0.0.1:6379> BRPOP LIST1 LIST2 .. LISTN TIMEOUT

返回值:假如在指定時間內(nèi)沒有任何元素被彈出受啥,則返回一個 nil 和等待時長。 反之鸽心,返回一個含有兩個元素的列表滚局,第一個元素是被彈出元素所屬的 key ,第二個元素是被彈出元素的值顽频。

可用版本:>= 2.0.0

時間復(fù)雜度:O(1)

具體實(shí)例:

<?php
$redis = new redis();
$redis -> connect('127.0.0.1',6379);
$redis -> flushAll();

// This first case: 非阻塞行為藤肢,最少有一個非空列表
$redis -> lPush('favorite_fruit','cherry');
$redis -> lPush('favorite_fruit','banana');
$redis -> lPush('favorite_fruit','apple');

$redis -> lPush('pats','dog');
$redis -> lPush('pats','cat');
$redis -> lPush('pats','rabbit');

var_dump($redis -> brPop('favorite_fruit',3));
//  array (size=2)
//      0 => string 'favorite_fruit' (length=14)
//      1 => string 'cherry' (length=6)

$array_brpop = array('favorite_fruit','pats');
var_dump($redis -> brPop($array_brpop,3));          // 優(yōu)先彈出第一個非空列表的頭元素
//  array (size=2)
//      0 => string 'favorite_fruit' (length=14)
//      1 => string 'banana' (length=6)

var_dump($redis -> lRange('favorite_fruit',0,-1));
//  array (size=1)
//      0 => string 'apple' (length=5)

// This second case: 阻塞行為, 所有給定key都不存在或包含空列表
var_dump($redis -> brPop('fake_key',2));    // 阻塞鏈接, 2s 之后超時結(jié)束糯景,返回 array (size=0) empty

9嘁圈、LLEN

Redis Llen 命令用于返回列表的長度。 如果列表 key 不存在蟀淮,則 key 被解釋為一個空列表最住,返回 0 。 如果 key 不是列表類型怠惶,返回一個錯誤涨缚。

語法:

redis 127.0.0.1:6379> LLEN KEY_NAME

返回值:列表的長度。

可用版本:>= 1.0.0

時間復(fù)雜度:O(1)

具體實(shí)例:

<?php
$redis = new redis();
$redis -> connect('127.0.0.1',6379);
$redis -> flushAll();

$redis -> lPush('favorite_fruit','cherry');
$redis -> lPush('favorite_fruit','banana');
$redis -> lPush('favorite_fruit','apple');

var_dump($redis -> lLen('favorite_fruit'));     // int 3
var_dump($redis -> lLen('fake_key'));           // 列表不存在策治,返回 int 0

10脓魏、LRANGE

Redis Lrange 返回列表中指定區(qū)間內(nèi)的元素兰吟,區(qū)間以偏移量 START 和 END 指定。 其中 0 表示列表的第一個元素茂翔, 1 表示列表的第二個元素揽祥,以此類推。 你也可以使用負(fù)數(shù)下標(biāo)檩电,以 -1 表示列表的最后一個元素拄丰, -2 表示列表的倒數(shù)第二個元素,以此類推俐末。

 ×习础(1)超出范圍的下標(biāo)值不會引起錯誤。

 ∽矿铩(2)如果<tt class="docutils literal" style="margin: 0px; padding: 0px;">start</tt>下標(biāo)比列表的最大下標(biāo)<tt class="docutils literal" style="margin: 0px; padding: 0px;">end</tt>(<tt class="docutils literal" style="margin: 0px; padding: 0px;">LLEN list</tt>減去<tt class="docutils literal" style="margin: 0px; padding: 0px;">1</tt>)還要大载矿,或者<tt class="docutils literal" style="margin: 0px; padding: 0px;">start > stop</tt>,LRANGE返回一個空列表烹卒。

 ∶瓶(3)如果<tt class="docutils literal" style="margin: 0px; padding: 0px;">stop</tt>下標(biāo)比<tt class="docutils literal" style="margin: 0px; padding: 0px;">end</tt>下標(biāo)還要大,Redis將<tt class="docutils literal" style="margin: 0px; padding: 0px;">stop</tt>的值設(shè)置為<tt class="docutils literal" style="margin: 0px; padding: 0px;">end</tt>旅急。

語法:

redis 127.0.0.1:6379> **LRANGE **KEY_NAME START END

返回值:一個列表逢勾,包含指定區(qū)間內(nèi)的元素。

可用版本:>= 1.0.0

時間復(fù)雜度:O(S+N)藐吮,<tt class="docutils literal" style="margin: 0px; padding: 0px;">S</tt>為偏移量<tt class="docutils literal" style="margin: 0px; padding: 0px;">start</tt>溺拱,<tt class="docutils literal" style="margin: 0px; padding: 0px;">N</tt>為指定區(qū)間內(nèi)元素的數(shù)量。

具體實(shí)例:

<?php
$redis = new redis();
$redis -> connect('127.0.0.1',6379);
$redis -> flushAll();

$redis -> lPush('favorite_fruit','cherry');
$redis -> lPush('favorite_fruit','banana');
$redis -> lPush('favorite_fruit','apple');
$redis -> lPush('favorite_fruit','peach');
$redis -> lPush('favorite_fruit','pineapple');
$redis -> lPush('favorite_fruit','grape');

var_dump($redis -> lRange('favorite_fruit',1,3));
//   array (size=3)
//      0 => string 'pineapple' (length=9)
//      1 => string 'peach' (length=5)
//      2 => string 'apple' (length=5)

var_dump($redis -> lRange('favorite_fruit',6,2));     // 當(dāng) start > end 時谣辞,返回空數(shù)組迫摔, array (size=0) empty

var_dump($redis -> lRange('favorite_fruit',0,100));   // 當(dāng) end 大于列表長度時,按 end 值計算
//  array (size=6)
//      0 => string 'grape' (length=5)
//      1 => string 'pineapple' (length=9)
//      2 => string 'peach' (length=5)
//      3 => string 'apple' (length=5)
//      4 => string 'banana' (length=6)
//      5 => string 'cherry' (length=6)

11泥从、LREM

Redis Lrem 根據(jù)參數(shù) COUNT 的值句占,移除列表中與參數(shù) VALUE 相等的元素。

COUNT 的值可以是以下幾種:

count > 0 : 從表頭開始向表尾搜索躯嫉,移除與 VALUE 相等的元素纱烘,數(shù)量為 COUNT 。
count < 0 : 從表尾開始向表頭搜索和敬,移除與 VALUE 相等的元素凹炸,數(shù)量為 COUNT 的絕對值戏阅。
count = 0 : 移除表中所有與 VALUE 相等的值昼弟。
語法:

redis 127.0.0.1:6379> LREM KEY_NAME COUNT VALUE

返回值:被移除元素的數(shù)量。 列表不存在時返回 0 奕筐。

可用版本:>= 1.0.0

時間復(fù)雜度:O(N)舱痘,N為列表的長度变骡。

具體實(shí)例:

<?php
$redis = new redis();
$redis -> connect('127.0.0.1',6379);
$redis -> flushAll();

$redis -> lPush('favorite_fruit','cherry');
$redis -> lPush('favorite_fruit','apple');
$redis -> lPush('favorite_fruit','apple');
$redis -> lPush('favorite_fruit','peach');
$redis -> lPush('favorite_fruit','apple');
$redis -> lPush('favorite_fruit','grape');

var_dump($redis -> lRem('favorite_fruit','apple',2));   // int 2    // 從開頭向結(jié)尾方向移除 2 個
var_dump($redis -> lRange('favorite_fruit',0,-1));
//array (size=4)
//  0 => string 'grape' (length=5)
//  1 => string 'peach' (length=5)
//  2 => string 'apple' (length=5)
//  3 => string 'cherry' (length=6)

var_dump($redis -> lRem('favorite_fruit','apple',-1));   // int1    // 從結(jié)尾向開頭方向移除 1 個
var_dump($redis -> lRange('favorite_fruit',0,-1));
//array (size=3)
//  0 => string 'grape' (length=5)
//  1 => string 'peach' (length=5)
//  2 => string 'cherry' (length=6)

var_dump($redis -> lRem('favorite_fruit','peach',0));   // int 1    // 移除所有的 value
var_dump($redis -> lRange('favorite_fruit',0,-1));
//array (size=2)
//  0 => string 'grape' (length=5)
//  1 => string 'cherry' (length=6)

12、LSET

Redis Lset 通過索引來設(shè)置元素的值芭逝。當(dāng)索引參數(shù)超出范圍塌碌,或?qū)σ粋€空列表進(jìn)行 LSET 時,返回一個錯誤旬盯。

語法:

redis 127.0.0.1:6379> **LSET **KEY_NAME INDEX VALUE

返回值:操作成功返回 ok 台妆,否則返回錯誤信息。

可用版本:>= 1.0.0

時間復(fù)雜度:對頭元素或尾元素進(jìn)行LSET操作胖翰,復(fù)雜度為O(1)接剩。其他情況下,為O(N)萨咳,<tt class="docutils literal" style="margin: 0px; padding: 0px;">N</tt>為列表的長度懊缺。

具體實(shí)例:

<?php
$redis = new redis();
$redis -> connect('127.0.0.1',6379);
$redis -> flushAll();

$redis -> lPush('favorite_fruit','cherry');
$redis -> lPush('favorite_fruit','apple');
$redis -> lPush('favorite_fruit','peach');
$redis -> lPush('favorite_fruit','grape');

var_dump($redis -> lSet('favorite_fruit','1','pineapple'));   // 將第一個元素替換為 pineapple
var_dump($redis -> lRange('favorite_fruit',0,-1));
//  array (size=4)
//      0 => string 'grape' (length=5)
//      1 => string 'pineapple' (length=9)
//      2 => string 'apple' (length=5)
//      3 => string 'cherry' (length=6)

var_dump($redis -> lSet('favorite_fruit','100','pitaya'));   // boolean false , 對索引超過范圍進(jìn)行設(shè)置培他,設(shè)置不成功
var_dump($redis -> lSet('fake_key',1,'mango'));              // boolean false 鹃两, 對不存在的 key 進(jìn)行設(shè)置,設(shè)置不成功

13舀凛、LTRIM

Redis Ltrim 對一個列表進(jìn)行修剪(trim)俊扳,就是說,讓列表只保留指定區(qū)間內(nèi)的元素猛遍,不在指定區(qū)間之內(nèi)的元素都將被刪除拣度。(下標(biāo) 0 表示列表的第一個元素,以 1 表示列表的第二個元素螃壤,以此類推抗果。 你也可以使用負(fù)數(shù)下標(biāo),以 -1 表示列表的最后一個元素奸晴, -2 表示列表的倒數(shù)第二個元素冤馏,以此類推)。

(1)超出范圍的下標(biāo)值不會引起錯誤寄啼。

(2)如果start下標(biāo)比列表的最大下標(biāo)end(LLEN list減去1)還要大逮光,或者start > stop,LTRIM返回一個空列表(因為LTRIM已經(jīng)將整個列表清空)墩划。

(3)如果stop下標(biāo)比end下標(biāo)還要大涕刚,Redis將stop的值設(shè)置為end。

語法:

redis 127.0.0.1:6379> LTRIM KEY_NAME START STOP

返回值:命令執(zhí)行成功時乙帮,返回 ok

可用版本:>= 1.0.0

時間復(fù)雜度:O(N)杜漠,N為被移除的元素的數(shù)量。

具體實(shí)例:

<?php
$redis = new redis();
$redis -> connect('127.0.0.1',6379);
$redis -> flushAll();

$redis -> lPush('favorite_fruit','cherry');
$redis -> lPush('favorite_fruit','apple');
$redis -> lPush('favorite_fruit','peach');
$redis -> lPush('favorite_fruit','grape');

var_dump($redis -> lTrim('favorite_fruit',1,-1));
var_dump($redis -> lRange('favorite_fruit',0,-1));
//  array (size=3)
//      0 => string 'peach' (length=5)
//      1 => string 'apple' (length=5)
//      2 => string 'cherry' (length=6)

var_dump($redis -> lTrim('favorite_fruit',1,10));   // end > list 的長度,那就將 stop 值設(shè)為 end
var_dump($redis -> lRange('favorite_fruit',0,-1));
//  array (size=2)
//      0 => string 'apple' (length=5)
//      1 => string 'cherry' (length=6)

var_dump($redis -> lTrim('favorite_fruit',7,1));        // start > end 或 start > stop , 清空整個 list
var_dump($redis -> lRange('favorite_fruit',0,-1));     // 返回 array (size=0) empty

14驾茴、LINDEX

Redis Lindex 命令用于通過索引獲取列表中的元素盼樟。你也可以使用負(fù)數(shù)下標(biāo),以 -1 表示列表的最后一個元素锈至, -2 表示列表的倒數(shù)第二個元素晨缴,以此類推。

語法:

redis 127.0.0.1:6379> LINDEX KEY_NAME INDEX_POSITION

返回值:列表中下標(biāo)為指定索引值的元素峡捡。 如果指定索引值不在列表的區(qū)間范圍內(nèi)击碗,返回 nil 。

可用版本:>= 1.0.0

時間復(fù)雜度:O(N)们拙,N為到達(dá)下標(biāo)index過程中經(jīng)過的元素數(shù)量, 對列表的頭元素和尾元素執(zhí)行LINDEX命令延都,復(fù)雜度為O(1)。

具體實(shí)例:

<?php
$redis = new redis();
$redis -> connect('127.0.0.1',6379);
$redis -> flushAll();

$redis -> lPush('favorite_fruit','cherry');
$redis -> lPush('favorite_fruit','apple');
$redis -> lPush('favorite_fruit','peach');
$redis -> lPush('favorite_fruit','grape');

var_dump($redis -> lIndex('favorite_fruit',2));     // string 'apple'
var_dump($redis -> lRange('favorite_fruit',0,-1));  // 原 list 表不變
//  array (size=4)
//      0 => string 'grape' (length=5)
//      1 => string 'peach' (length=5)
//      2 => string 'apple' (length=5)
//      3 => string 'cherry' (length=6)

15睛竣、LINSERT

Redis Linsert 命令用于在列表的元素前或者后插入元素晰房。 當(dāng)指定元素不存在于列表中時,不執(zhí)行任何操作射沟。 當(dāng)列表不存在時殊者,被視為空列表,不執(zhí)行任何操作验夯。 如果 key 不是列表類型猖吴,返回一個錯誤。

語法:

redis 127.0.0.1:6379> LINSERT KEY_NAME BEFORE EXISTING_VALUE NEW_VALUE

返回值:如果命令執(zhí)行成功挥转,返回插入操作完成之后海蔽,列表的長度。 如果沒有找到指定元素 绑谣,返回 -1 党窜。 如果 key 不存在或為空列表,返回 0 借宵。

可用版本:>= 1.0.0

時間復(fù)雜度:O(N)幌衣,N 為尋找pivot過程中經(jīng)過的元素數(shù)量。

具體實(shí)例:

<?php
$redis = new redis();
$redis -> connect('127.0.0.1',6379);
$redis -> flushAll();

$redis -> lPush('favorite_fruit','cherry');
$redis -> lPush('favorite_fruit','apple');
$redis -> lPush('favorite_fruit','peach');
$redis -> lPush('favorite_fruit','grape');

// The first case : 成功插入壤玫,返回列表長度
var_dump($redis -> lInsert('favorite_fruit','before','apple','Mango'));     // int 5
var_dump($redis -> lRange('favorite_fruit',0,-1));
//array (size=5)
//  0 => string 'grape' (length=5)
//  1 => string 'peach' (length=5)
//  2 => string 'Mango' (length=5)
//  3 => string 'apple' (length=5)
//  4 => string 'cherry' (length=6)

// The seconde case : 沒有找到指定元素 豁护,返回 -1
var_dump($redis -> lInsert('favorite_fruit','before','not_exists','pitaya'));     // int -1
var_dump($redis -> lRange('favorite_fruit',0,-1));      // 原 list 不變
//array (size=5)
//  0 => string 'grape' (length=5)
//  1 => string 'peach' (length=5)
//  2 => string 'Mango' (length=5)
//  3 => string 'apple' (length=5)
//  4 => string 'cherry' (length=6)

// The third case : 沒有找到指定元素 ,返回 0
var_dump($redis -> lInsert('fake_key','before','apple','watermelon'));     // int 0

16、RPOPLPUSH

Redis Rpoplpush 命令用于移除列表的最后一個元素欲间,并將該元素添加到另一個列表并返回楚里。

語法:

redis 127.0.0.1:6379> RPOPLPUSH SOURCE_KEY_NAME DESTINATION_KEY_NAME

返回值:被彈出的元素。

可用版本:>= 1.0.0

時間復(fù)雜度:O(1)

具體實(shí)例:

<?php
$redis = new redis();
$redis -> connect('127.0.0.1',6379);
$redis -> flushAll();

$redis -> lPush('favorite_fruit','cherry');
$redis -> lPush('favorite_fruit','apple');
$redis -> lPush('favorite_fruit','peach');
$redis -> lPush('favorite_fruit','grape');

// The first case : 若 source 和 desitination 相同猎贴,則尾旋轉(zhuǎn)操作
var_dump($redis -> rpoplpush('favorite_fruit','favorite_fruit'));   // cherry
var_dump($redis -> lRange('favorite_fruit',0,-1));
//array (size=4)
//  0 => string 'cherry' (length=6)
//  1 => string 'grape' (length=5)
//  2 => string 'peach' (length=5)
//  3 => string 'apple' (length=5)

// The second case : 移動操作
var_dump($redis -> rpoplpush('favorite_fruit','other_list'));   // apple
var_dump($redis -> lRange('favorite_fruit',0,-1));
//array (size=3)
//  0 => string 'cherry' (length=6)
//  1 => string 'grape' (length=5)
//  2 => string 'peach' (length=5)

var_dump($redis -> lRange('other_list',0,-1));
//array (size=1)
//  0 => string 'apple' (length=5)

17班缎、BRPOPLPUSH

Redis Brpoplpush 命令從列表中彈出一個值蝴光,將彈出的元素插入到另外一個列表中并返回它; 如果列表沒有元素會阻塞列表直到等待超時或發(fā)現(xiàn)可彈出元素為止吝梅。

(1)當(dāng)給定列表source不為空時,BRPOPLPUSH的表現(xiàn)和RPOPLPUSH一樣惹骂。

(2)當(dāng)列表source為空時苏携,BRPOPLPUSH命令將阻塞連接,直到等待超時对粪,或有另一個客戶端對source執(zhí)行LPUSH或RPUSH命令為止右冻。

(3)超時參數(shù)timeout接受一個以秒為單位的數(shù)字作為值。超時參數(shù)設(shè)為0表示阻塞時間可以無限期延長

語法:

redis 127.0.0.1:6379> BRPOPLPUSH LIST1 ANOTHER_LIST TIMEOUT

返回值:假如在指定時間內(nèi)沒有任何元素被彈出著拭,則返回一個 nil 和等待時長纱扭。 反之,返回一個含有兩個元素的列表儡遮,第一個元素是被彈出元素的值乳蛾,第二個元素是等待時長。

可用版本:>= 2.0.0

時間復(fù)雜度:O(1)

具體實(shí)例:

<?php
$redis = new redis();
$redis -> connect('127.0.0.1',6379);
$redis -> flushAll();

$redis -> lPush('favorite_fruit','cherry');
$redis -> lPush('favorite_fruit','apple');
$redis -> lPush('favorite_fruit','peach');
$redis -> lPush('favorite_fruit','grape');

// The first case : 若 source 和 desitination 相同鄙币,則尾旋轉(zhuǎn)操作
var_dump($redis -> brpoplpush('favorite_fruit','favorite_fruit',2));   // cherry ,并沒有返回 time
var_dump($redis -> lRange('favorite_fruit',0,-1));
//array (size=4)
//  0 => string 'cherry' (length=6)
//  1 => string 'grape' (length=5)
//  2 => string 'peach' (length=5)
//  3 => string 'apple' (length=5)

// The second case : 移動操作
var_dump($redis -> brpoplpush('favorite_fruit','other_list',2));   // apple 肃叶,并沒有返回 time
var_dump($redis -> lRange('favorite_fruit',0,-1));
//array (size=3)
//  0 => string 'cherry' (length=6)
//  1 => string 'grape' (length=5)
//  2 => string 'peach' (length=5)

var_dump($redis -> lRange('other_list',0,-1));
//array (size=1)
//  0 => string 'apple' (length=5)

var_dump($redis -> brpoplpush('fake_key','desination_key',2));  // 等待 2s 后返回 false  ,并沒有返回 time
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末十嘿,一起剝皮案震驚了整個濱河市因惭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌绩衷,老刑警劉巖蹦魔,帶你破解...
    沈念sama閱讀 223,126評論 6 520
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異咳燕,居然都是意外死亡勿决,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,421評論 3 400
  • 文/潘曉璐 我一進(jìn)店門招盲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來剥险,“玉大人,你說我怎么就攤上這事宪肖”碇疲” “怎么了?”我有些...
    開封第一講書人閱讀 169,941評論 0 366
  • 文/不壞的土叔 我叫張陵控乾,是天一觀的道長么介。 經(jīng)常有香客問我,道長蜕衡,這世上最難降的妖魔是什么壤短? 我笑而不...
    開封第一講書人閱讀 60,294評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上久脯,老公的妹妹穿的比我還像新娘纳胧。我一直安慰自己,他們只是感情好帘撰,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,295評論 6 398
  • 文/花漫 我一把揭開白布跑慕。 她就那樣靜靜地躺著,像睡著了一般摧找。 火紅的嫁衣襯著肌膚如雪核行。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,874評論 1 314
  • 那天蹬耘,我揣著相機(jī)與錄音芝雪,去河邊找鬼。 笑死综苔,一個胖子當(dāng)著我的面吹牛惩系,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播如筛,決...
    沈念sama閱讀 41,285評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼蛆挫,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了妙黍?” 一聲冷哼從身側(cè)響起悴侵,我...
    開封第一講書人閱讀 40,249評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎拭嫁,沒想到半個月后可免,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,760評論 1 321
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡做粤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,840評論 3 343
  • 正文 我和宋清朗相戀三年浇借,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片怕品。...
    茶點(diǎn)故事閱讀 40,973評論 1 354
  • 序言:一個原本活蹦亂跳的男人離奇死亡妇垢,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出肉康,到底是詐尸還是另有隱情闯估,我是刑警寧澤,帶...
    沈念sama閱讀 36,631評論 5 351
  • 正文 年R本政府宣布吼和,位于F島的核電站涨薪,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏炫乓。R本人自食惡果不足惜刚夺,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,315評論 3 336
  • 文/蒙蒙 一献丑、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧侠姑,春花似錦创橄、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,797評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至船老,卻和暖如春咖熟,著一層夾襖步出監(jiān)牢的瞬間圃酵,已是汗流浹背柳畔。 一陣腳步聲響...
    開封第一講書人閱讀 33,926評論 1 275
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留郭赐,地道東北人薪韩。 一個月前我還...
    沈念sama閱讀 49,431評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像捌锭,于是被迫代替她去往敵國和親俘陷。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,982評論 2 361

推薦閱讀更多精彩內(nèi)容

  • Redis::__construct構(gòu)造函數(shù)$redis = new Redis(); connect, open...
    bycall閱讀 1,432評論 0 2
  • phpredis是php的一個擴(kuò)展Redis::__construct構(gòu)造函數(shù)$redis = new Redis...
    hello大象閱讀 765評論 0 2
  • 轉(zhuǎn)自:http://bbs.redis.cn/forum.php?mod=viewthread&tid=481 p...
    木十2036閱讀 815評論 0 7
  • 昨天用一下午加晚上的時間趕過來看梅观谦,結(jié)果今天缺少了賞梅的耐心拉盾! 大概是因為疲倦不堪!還有就是失去平靜的焦躁的心豁状! ...
    曼谷123閱讀 144評論 0 0
  • 我遇到的情緒管理較好的人:梁老師捉偏、霍杏花、張程遠(yuǎn)老師泻红,共同點(diǎn) 1.愛學(xué)習(xí)夭禽,對變化很開放。梁老師是雙碩士學(xué)位谊路,讀過非...
    行者無疆頌閱讀 735評論 0 0