Redis List問題


RedisのlistとJavaのLinkedListは似ていて、下部はチェーンテーブル構造で、listの挿入と削除操作は非常に速く、時間の複雑度は0(1)で、配列構造の挿入、削除操作のようにデータを移動する必要はありません.帰像のようですが、redisのlist下位層は双方向チェーンテーブルほど簡単ではありません.データ量が少ない場合、その下位ストレージ構造はziplist(圧縮リスト)と呼ばれ、すべての要素を隣接して格納し、連続したメモリを割り当てます.データ量が多いとquicklist(クイックチェーンテーブル)構造になります.単純なチェーンテーブルでも欠陥があり、チェーンテーブルの前後ポインタprevやnextはメモリを多く消費し、スペースを浪費し、メモリの断片化を強める.redis 3.2以降はziplist+チェーンテーブルの混合構造に変更され、quicklist(クイックチェーンテーブル)と呼ばれる.Listの操作命令は以下の通り:LPUSH
        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   ,    ,  01           ,    。
          ,  -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   ,    ,  01           ,    。
          ,  -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   。