Redis List問題
RedisのlistとJavaのLinkedListは似ていて、下部はチェーンテーブル構造で、listの挿入と削除操作は非常に速く、時間の複雑度は0(1)で、配列構造の挿入、削除操作のようにデータを移動する必要はありません.帰像のようですが、redisのlist下位層は双方向チェーンテーブルほど簡単ではありません.データ量が少ない場合、その下位ストレージ構造はziplist(圧縮リスト)と呼ばれ、すべての要素を隣接して格納し、連続したメモリを割り当てます.データ量が多いとquicklist(クイックチェーンテーブル)構造になります.単純なチェーンテーブルでも欠陥があり、チェーンテーブルの前後ポインタprevやnextはメモリを多く消費し、スペースを浪費し、メモリの断片化を強める.redis 3.2以降はziplist+チェーンテーブルの混合構造に変更され、quicklist(クイックチェーンテーブル)と呼ばれる.Listの操作命令は以下の通り:LPUSH
LPUSHX
RPUSH
RPUSHX
LPOP
RPOP
RPOPLPUSH
LREM
LLEN
LINDEX
LINSERT
LSET
LRANGE
LTRIM
BLPOP
BRPOP
BRPOPLPUSH
value key
value , value : , mylist LPUSH mylist a b c , c b a , LPUSH mylist a 、 LPUSH mylist b LPUSH mylist c 。
key , LPUSH 。
key , 。
LPUSHX
value key , key 。
LPUSH key value [value …] , key , LPUSHX 。
RPUSH
value key ( )。
value , value : mylist RPUSH mylist a b c , a b c , RPUSH mylist a 、 RPUSH mylist b 、 RPUSH mylist c 。
key , RPUSH 。
key , 。
RPUSHX
value key , key 。
RPUSH key value [value …] , key , RPUSHX 。
LPOP
key 。
RPOP
key 。
RPOPLPUSH
RPOPLPUSH , :
source ( ) , 。
source destination , destination 。
LREM
count , value 。
LLEN
key 。
key , key , 0 .
key , 。
LINDEX
key , index 。
(index) start stop 0 , , 0 , 1 , 。
, -1 , -2 , 。
key , 。
LINSERT
value key , pivot 。
pivot key , 。
key , key , 。
key , 。
LSET
key index value 。
index , ( key ) LSET , 。
, LINDEX key index 。
LRANGE
key , start stop 。
(index) start stop 0 , , 0 , 1 , 。
, -1 , -2 , 。
LTRIM
(trim), , , 。
BLPOP
BLPOP (blocking) 。
LPOP key , , BLPOP , 。
key , key , 。
BRPOP
BRPOP (blocking) 。
RPOP key , , BRPOP , 。
key , key , 。
, BLPOP key [key …] timeout , BRPOP BLPOP key [key …] timeout , 。
BRPOPLPUSH
BRPOPLPUSH RPOPLPUSH source destination , source , BRPOPLPUSH RPOPLPUSH source destination 。
source , BRPOPLPUSH , , source LPUSH key value [value …] RPUSH key value [value …] 。
timeout 。 0 (block indefinitely) 。
, RPOPLPUSH source destination 。