1. 程式人生 > >redis的資料型別List,其原生命令和php操作Redis List函式介紹

redis的資料型別List,其原生命令和php操作Redis List函式介紹

List型別介紹

List是簡單的字串列表,按照插入順序排序,可以從列表的兩頭新增資料,一個列表最多可以包含2^32-1個元素(超過40億個元素)

List原生命令

命令 命令描述 例項
LPUSH key value1 [value2] 此命令將一個或多個值插入到列表的頭部;如果列表不存在,則建立一個空列表,然後執行LPUSH操作;如果有錯誤則返回一個錯誤,成功返回列表的長度 LPUSH list1 "foo" 返回:1;LPUSH list1 "hear":返回2
LPUSHX key value 將值value插入到列表key的頭部,若列表不存在時操作無效,插入失敗;成功則返回列表的長度 LPUSHX list1 "head";LRANGE list1 0 -1,返回:“head”,‘hear’,‘foo’
RPUSH key value1 [value2] 新增一個或多個值到列表尾部,如果key不存在則先建立空列表,然後執行RPUSH操作,成功則返回列表長度 RPUSH list1 'foot';LRANGE list1 0 -1,返回:“head”,‘hear’,‘foo’,‘foot’
RPUSHX key value 將value值插入到已存在的列表key的尾部,如果列標配key不存在,則操作無效,插入失敗;存在則返回列表的長度 RPUSHX list1 'jkl';獲取列表的值jkl在列表尾部
LPOP key 移除列表key的第一個元素,並返回該元素 LPOP list1,返回‘head’;LRANGE list1 0 -1,返回:‘hear’,‘foo’,‘foot’,‘jkl’
RPOP key 移除列表的最後一個元素,並返回該元素 RPOP list1,返回:‘jkl’;LRANGE list1 0 -1,返回:‘hear’,‘foo’,‘foot’
BLPOP key1 [key2] timeout 移出並獲取列表的第一個元素,如果列表沒有元素則會阻塞列表,直到等待時間超時或有元素可彈出為止。如果列表為空,則返回nil;否則返回一個含有兩個元素的列表,第一個元素是被彈出的元素的key,另一個是被彈出元素的值。如果有多個key,則返回第一個非空列表的頭元素;如果所有列表為空或者不存在,則會阻塞列表,直到等待時間超時或有列表不為空為止 BLPOP list1 100,返回"list1", "hear";BLPOP list2 30,返回nil,30.52s;
BRPOP key1 [key2 ] timeout 和BLPOP類似,只不過是移出最後一個元素 BRPOP list1 100,返回"list1", "kui";BLPOP list1 30,返回nil,30.58s;
LLEN key 返回列表的長度;如果列表key不存在,則列表key被認為是空列表,返回0;如果key不是列表型別,則返回一個錯誤 LLEN list1,返回1
LRANGE key start stop 返回列表中指定區間的元素,區間以偏移量start和stop指定;0表示第一個元素,以此類推下去;也可以用負數表示,-1表示最後一個元素,以此類推下去 LRANGE list1 0 -1,取得列表的所有值;
LREM key count value 根據引數count的值,移除列表中與引數value值相同的元素;count > 0:從表頭向表尾搜尋,移除count個與value值相同的元素;count < 0:從表尾向表頭搜尋,移除count的絕對值個與value值相同的元素;count = 0:移除表中所有與value相同的值;成功返回移除元素的個數,失敗則返回0 LREM list1 2 'ipo';返回:2
LSET key index value 通過索引設定元素的值;當索引引數超出範圍或者對一個空列表進行LSET操作,返回一個錯誤,操作成功,返回“OK” LSET list1 0 'lpt',返回Ok,將索引為0的值設為“lpt”
LTRIM key start stop 對一個列表進行修剪(trim),只留下指定區間內的元素,不在指定區間的元素都將被刪除;索引0表示第一個元素,以此類推;最後一個元素的索引為-1,以此類推。執行成功返回“OK” LTRIM list1 1 2,返回“ok”
LINDEX key index 通過索引獲取元素的值,索引0表示第一個元素,以此類推;-1表示最後一個元素,以此類推;index在列表的區間內則返回該索引對應的值,不在列表的區間內則返回nil LINDEX list1 9;返回:nil
LINSERT key BEFORE(AFTER) pivot value 在列表的元素前或者後面插入元素,當指定元素不存在列表中是,不做任何操作,返回 -1;當列表不存在時,視為空列表,不執行任何操作,返回 0;如果key不是列表型別,返回一個錯誤;執行成功將value插入到元素pivot的前面或者後面,並返回插入後列表的長度;如果存在多個pivot ,則在第一個pivot 值的前或者後面插入value LINSERT list1 before 'tip' 'mnb';返回6
BRPOPLPUSH source destination timeout 從列表source 中彈出一個元素,將彈出的元素插入到另外一個列表destination 中,並返回這個元素;如果列表中不存在元素,則會阻塞列表直到有可彈出元素或者等待超時;如果指定時間內沒有任何元素彈出,則返回一個nil和等待時長;反之,則返回一個含有兩個元素的列表,第一個元素是彈出的元素,另一個元素是等待時長 BRPOPLPUSH list1 list2 40;返回:“tip”
RPOPLPUSH source destination 移除source 列表的最後一個元素,並將元素寫入到destination列表中,並返回這個元素 RPOPLPUSH list1 list2

php操作redis List的函式

  • lPush(key,value)函式
    * 說明:此命令將一個值插入到列表的頭部;如果列表不存在,則建立一個空列表,然後執行次函式;成功返回列表的長度,如果key存在但不是列表則返回false
    * 引數:key(列表名稱),value(將要插入列表key的值)
    * 返回值:成功返回列表的長度,失敗返回false
    * php $redis->lPush('list1', 'bnk');
  • lPushx(key,value)函式
    * 說明:新增value到列表key的頭部(left),如果key存在的話
    * 引數:key(列表名稱),value(將要插入的值)
    * 返回:成功返回列表的長度,失敗則返回false
    * php $redis->lPushx('list1', 'ujn');
  • rPush(key,value)函式
    * 說明:將value值新增到列表key的尾部(right),如果key不存在,則新建key然後將value插入到key中;如果key存在但不是list型別,則返回false
    * 引數:key(列表名稱),value(將要插入的值)
    * 返回:成功則返回列表的長度,失敗則返回false
    * php $redis->rPush('list1', 'lgh');
  • rPushX(key,value)函式
    * 說明:將value值插入到key的尾部(right),失敗返回false
    * 引數:key(列表名稱),value(將要插入的值)
    * 返回:成功則返回列表長度,失敗則返回false
    * php $redis->rPushX('list1', 'lfr');
  • lPop(key)函式
    * 說明:返回並移除列表key頭部的第一個元素(從左到右)
    * 引數:key(列表名稱)
    * 返回:執行成功返回列表key頭部的第一個元素;失敗或者空列表返回false
    * php $redis->lPop('list1');
  • rPop(key)函式
    * 說明:返回並刪除列表key尾部的第一個元素
    * 引數: key(列表的名稱)
    * 返回:成功則返回列表key尾部的第一個元素;失敗或者空列表返回false
    * php $redis->rPop('list1');
  • blPop(array,Timeout),brPop(key1,key2,...keyn,Timeout)函式
    * 說明:blPop移出並獲取列表的第一個元素,如果列表沒有元素則會阻塞列表,直到等待時間超時或有元素可彈出為止。如果列表為空,則返回nil;否則返回一個含有兩個元素的列表,第一個元素是被彈出的元素的key,另一個是被彈出元素的值。如果有多個key,則返回第一個非空列表的頭元素;如果所有列表為空或者不存在,則會阻塞列表,直到等待時間超時或有列表不為空為止;brPop()函式是移除並獲取最後一個元素;兩者的引數型別是通用的
    * 引數:array(由列表中的key組成的陣列),Timeout(列表阻塞的等待時間)
    * 返回值:返回一個含有兩個元素的列表,第一個元素是被彈出元素的key,第二個是彈出元素的值
    * php $redis->blPop('key1', 'key2', 10); /* array('key1', 'A') */ $redis->blPop(array('key1', 'key2'), 10); /* array('key1', 'A') */
  • lLen(key),lSize(key)函式
    * 說明:返回列表的大小,兩個函式是一樣的
    * 引數: key(列表的名稱)
    * 返回:如果key存在則返回key的長度;如果key不存在或者為空則返回0;如果key存在但不是list型別,則返回false
    * php $redis->lSize('key1');/* 3 */$redis->lLen('key1');/* 3 */
  • lRange(key,start,stop), lGetRange(key,start,stop)函式
    * 說明:返回列表key中指定區間[start,stop]的元素;key的第一個元素索引為0,第二個為1;最後一個為-1.倒數第二個為-2;以此類推。列個函式的作用是一樣的
    * 引數:key(列表的名稱),start(開始的索引),stop(結束的索引)
    * 返回:返回該區間內的元素組成的陣列
    * php $redis->lRange('key1', 0, -1); /* 返回列表中所有的元素 */
  • lRem(key,value,count),lRemove(key,value,count)函式
    * 說明:刪除key中等於value的元素count個;如果count>0,則從頭部刪除count個;count < 0,則從尾部刪除|count|個;count = 0,則刪除所有等於value的元素;
    * 引數:key(列表名稱),value(要刪除的元素值),count(要刪除value的個數)
    * 返回:如果執行成功,則返回刪除元素的個數,失敗則返回false
    * php $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') */
  • lSet(key,index,value)函式
    * 說明:為列表key中索引為index的元素賦予新值
    * 引數:key(列表名稱),index(key中元素的索引),value(index元素的新值)
    * 返回:新值設定成功返回true;如果key不是list型別或者index超出key的範圍則返回false;
    * php $redis->lSet('key1', 0, 'X');
  • lTrim(key,start,stop),listTrim(key,start,stop)函式
    * 說明:刪除指定區間之外的所有元素
    * 引數:key(列表名稱),start(開始元素的索引),stop(結束元素的索引)
    * 返回:成功返回指定區間內的元素組成的陣列;key不是list型別則返回false
    * php $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),lGet(key,index)函式
    * 說明:返回列表key中指定索引的元素值,索引從頭部0開始,往後類推;索引從尾部-1開始,往前類推;
    * 引數:key(列表名稱),index(指定的索引)
    * 返回:成功則返回索引為index的元素值,失敗則返回false
    * php $redis->lGet('key1', 0); /* 'A' */ $redis->lGet('key1', -1); /* 'C' */ $redis->lGet('key1', 10); /* `FALSE` */
  • lInsert(key,position Redis::BEFORE | Redis::AFTER,pivot,value)函式
    * 說明:插入value值到pivot值的前面或者後面,如果list不存在或者pivot不存在則不插入value;
    * 引數:key(列表名稱),Redis::BEFORE | Redis::AFTER(前面|後面),pivot(參照值),value(要插入的元素值)
    * 返回:成功返回key的長度,失敗則返回-1
    * php $redis->lInsert('key1', Redis::BEFORE, 'C', 'X'); /* 4 */ $redis->lInsert('key1', Redis::AFTER, 'W', 'value'); /* -1 */
  • rPopLPush(srckey,dstkey)函式
    * 說明:將srckey中的最後一個元素彈出並寫入到dstkey的頭部,並將這個元素返回
    * 引數:srckey(彈出最後一個元素的list),dstkey(寫入元素的list)
    * 返回:成功返回彈出的這個元素,失敗則返回false
    * php $redis->lPush('x', 'abc'); $redis->lPush('x', 'def'); $redis->lPush('y', '123'); $redis->lPush('y', '456'); var_dump($redis->rPopLPush('x', 'y')); /* "abc" */ var_dump($redis->lRange('x', 0, -1)); /* "def" */ var_dump($redis->lRange('y', 0, -1)); /* "abc","456", "123" */
  • bRPopLPush(srckey,dstkey,timeout)函式
    * 說明:將srckey中的最後一個元素彈出並寫入到dstkey的頭部,並將這個元素返回;如果srckey中沒有元素則阻塞srckey,直到srckey中有元素可彈出,或則timeout超時;和rPopLPush函式類似。
    * 引數:srckey(彈出最後一個元素的list),dstkey(寫入元素的list),timeout(等待彈出元素的時間)
    * 返回:成功返回彈出的元素,失敗返回false