redis的list型別其實就是乙個每個子元素都是string型別的雙向鍊錶。所以[lr]push和[lr]pop命令的演算法時間複雜度都是o(1)。另外list會記錄鍊錶的長度。所以llen操作也是o(1).鍊錶的最大長度是(2的32次方-1)。我們可以通過push,pop操作從鍊錶的頭部或者尾部新增刪除元素。這使得list既可以用作棧,也可以用作佇列。有意思的是list的pop操作還有阻塞版本的。當我們[lr]pop乙個list物件是,如果list是空,或者不存在,會立即返回nil。但是阻塞版本的b[lr]pop可以則可以阻塞,當然可以加超時時間,超時後也會返回nil。
為什麼要阻塞版本的pop呢,主要是為了避免輪詢。舉個簡單的例子如果我們用list來實現乙個工作佇列。執行任務的thread可以呼叫阻塞版本的pop去獲取任務這樣就可以避免輪詢去檢查是否有任務存在。當任務來時候工作執行緒可以立即返回,也可以避免輪詢帶來的延遲。
lpushkey string在key對應list的頭部新增字串元素,返回1表示成功,0表示key存在且不是list型別
rpopkey從list的尾部刪除元素,並返回刪除元素。如果key對應list不存在或者是空返回nil,如果key對應值不是list返回錯誤
llenkey返回key對應list的長度,key不存在返回0,如果key對應型別不是list返回錯誤
rpushkey string在key對應list的尾部新增字串元素,返回1表示成功,0表示key存在且不是list型別
lpopkey從list的頭部刪除元素,並返回刪除元素。如果key對應list不存在或者是空返回nil,如果key對應值不是list返回錯誤
lrangekey start end返回指定區間內的元素,下標從0開始,負值表示從後面計算,-1表示倒數第乙個元素,key不存在返回空列表
ltrimkey start end擷取list,保留指定區間內元素,成功返回1,key不存在返回錯誤
lsetkey index value設定list中指定下標的元素值,成功返回ok,key或者下標不存在返回錯誤
從key對應list中刪除count個和value相同的元素。
從左到右掃瞄返回對第乙個非空list進行lpop操作並返回,比如blpop list1 list2 list3 0 ,如果list不存在,list2,list3都是非空則對list2做lpop並返回從list2中刪除的元素。
如果所有的list都是空或不存在,則會阻塞timeout秒,timeout為0表示一直阻塞。當阻塞時,如果有client對key1...keyn中的任意key進行push操作,則第一在這個key上被阻塞的client會立即返回。如果超時發生,則返回nil。有點像unix的select或者poll。
brpop同
blpop不再贅述,乙個是從頭部刪除乙個是從尾部刪除。
rpoplpush srckey destkey
從srckey對應list的尾部移除元素並新增到destkey對應list的頭部,最後返回被移除的元素值,整個操作是原子的.如果srckey是空或者不存在返回nil。
Redis學習筆記之四 redis資料型別
redis資料型別 redis支援五種型別的資料 string 字串 hash 雜湊 list 列表 set 集合 zset 有序集合 sorted set 1.string 字串 string是redis最基本的型別,可以理解成與memcached一模一樣的型別,乙個key對應乙個value。st...
redis學習筆記 redis資料型別
泛指非關係型的資料庫。隨著網際網路web2.0 的興起,傳統的關聯式資料庫在應付web2.0 特別是超大規模和高併發的sns型別的web2.0純動態 已經顯得力不從心,暴露了很多難以克服的問題,而非關係型的資料庫則由於其本身的特點得到了非常迅速的發展。nosql資料庫的產生就是為了解決大規模資料集合...
Redis四 Redis資料型別
redis是乙個高效能的資料結構伺服器,稱之為資料結構伺服器的原因是,它提供了豐富的資料型別以滿足不同的應用場景,本文對redis的資料型別以及對這些型別可能的操作進行總結。redis常用的資料型別包括string set list hash以及sorted set.redis本身是k v系統,這裡...