本文為我閱讀了** 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