Redisリストデータ構造の実践的活用手法

Redisのリストは、要素を挿入順に管理する文字列集合です。先頭(左端)または末尾(右端)への要素追加が可能で、最大42億個のデータを格納できます。

先頭への要素追加(LPUSH)

LPUSHコマンドで複数の値をリスト先頭に追加します。

> LPUSH order_queue order:2001
(integer) 1
> LPUSH order_queue order:2002 order:2003
(integer) 3

範囲指定による要素取得(LRANGE)

指定インデックス範囲の要素を取得します。負のインデックスで末尾からの参照も可能です。

> LPUSH item_list item:A item:B item:C
(integer) 3
> LRANGE item_list 0 -1
1) "item:C"
2) "item:B"
3) "item:A"
> LRANGE item_list 1 2
1) "item:B"
2) "item:A"

存在するリストへの先頭追加(LPUSHX)

キーが存在する場合のみ要素を追加します。

> DEL temp_list
(integer) 1
> LPUSHX temp_list data:1
(integer) 0
> LPUSH temp_list data:1
(integer) 1
> LPUSHX temp_list data:2
(integer) 2

末尾への要素追加(RPUSH)

RPUSHでリスト末尾に値を追加します。

> RPUSH task_queue task:init
(integer) 1
> RPUSH task_queue task:process task:finalize
(integer) 3

リスト長の取得(LLEN)

LLenコマンドで現在の要素数を確認します。

> LLEN task_queue
(integer) 3
> LPUSH task_queue task:setup
(integer) 4
> LLEN task_queue
(integer) 4

要素の削除と取得(LPOP/RPOP)

LPOPで先頭、RPOPで末尾の要素を削除しつつ取得します。

> LPOP task_queue
"task:setup"
> RPOP task_queue
"task:finalize"

ブロッキングポップ操作(BLPOP)

要素が存在しない場合、指定タイムアウトまで待機します。

> BLPOP queue_A queue_B 5
1) "queue_A"
2) "message:100"

リスト間要素移動(RPOPLPUSH)

末尾要素を別のリスト先頭に移動させます。

> RPOPLPUSH source_queue target_queue
"item:Z"

インデックス操作(LINDEX/LSET)

LINDEXで要素参照、LSETで値の上書きが可能です。

> LSET item_list 1 "item:UPDATED"
OK
> LINDEX item_list 1
"item:UPDATED"

リストのトリム処理(LTRIM)

指定範囲外の要素を削除し、リストを縮小します。

> RPUSH data_stream 10 20 30 40 50
(integer) 5
> LTRIM data_stream 1 3
OK
> LRANGE data_stream 0 -1
1) "20"
2) "30"
3) "40"

条件付き要素挿入(LINSERT)

特定値の前後に新しい要素を挿入できます。

> LINSERT item_list AFTER "item:B" "item:NEW"
(integer) 4

要素の削除(LREM)

指定回数分、値に一致する要素を削除します。

> LREM item_list 2 "item:A"
(integer) 2

タグ: redis List-Operations Queue-Implementation

6月30日 22:19 投稿