03
第 3 章

データ構造(基本編)

この章で学ぶこと
1String 型の操作とアトミックカウンタ
2Hash 型によるオブジェクトの表現
3List 型によるキューとスタック
4Set と Sorted Set の集合操作
5TTL(有効期限)の設定
解説

前セクションの復習

インメモリデータストア
データをメモリ上に保持して高速にアクセスする
キーバリューモデル
キーを指定して値を読み書きする
redis-cli
Redis を操作するコマンドラインツール
復習
全体像
String
TTL
Hash
List
Set
Sorted Set
まとめ
解説

この章の全体像

String
文字列・数値・バイナリを格納する最も基本的な型
Hash
フィールドと値のペアを持つ、オブジェクト表現向きの型
List
順序付きのコレクション。キューやスタックに使う
Set
一意な値の集合。集合演算が可能
Sorted Set
スコア付きの順序集合。ランキングに使う
復習
全体像
String
TTL
Hash
List
Set
Sorted Set
まとめ
図解

5 つの基本データ構造

Redis のバリューに使えるデータ構造の全体像

復習
全体像
String
TTL
Hash
List
Set
Sorted Set
まとめ
解説

String 型とは

String 型
Redis で最も基本的なデータ構造
格納できる値: 文字列、数値、バイナリデータ
最大サイズ: 512 MB
復習
全体像
String
TTL
Hash
List
Set
Sorted Set
まとめ
コマンド

SET / GET / DEL / EXISTS

$ SET key value$ GET key
SET key valueキーに値を格納する
GET keyキーの値を取得する
DEL key [key ...]キーを削除する
EXISTS keyキーが存在するか確認する(存在数を返す)
復習
全体像
String
TTL
Hash
List
Set
Sorted Set
まとめ
実演

実演 — SET / GET / DEL / EXISTS

目的String 型の基本操作を確認する
操作SET → GET → EXISTS → DEL → GET
確認する
ポイント
DEL 後に GET すると nil が返る
復習
全体像
String
TTL
Hash
List
Set
Sorted Set
まとめ
コマンド

INCR / DECR / INCRBY — アトミックカウンタ

$ INCR key$ INCRBY key increment
INCR key値を 1 増やす
DECR key値を 1 減らす
INCRBY key increment値を指定した数だけ増やす
キーが存在しなければ 0 から開始する
復習
全体像
String
TTL
Hash
List
Set
Sorted Set
まとめ
実演

実演 — アトミックカウンタ

目的INCR / DECR / INCRBY の動作を確認する
操作INCR → INCR → DECR → INCRBY
確認する
ポイント
存在しないキーへの INCR は 0 から開始する
復習
全体像
String
TTL
Hash
List
Set
Sorted Set
まとめ
コマンド

MSET / MGET — 複数キーの一括操作

$ MSET key value [key value ...]$ MGET key [key ...]
MSET複数のキーに値を一括設定する
MGET複数のキーの値を一括取得する
1 回の通信で複数のキーを操作できる
復習
全体像
String
TTL
Hash
List
Set
Sorted Set
まとめ
実演

実演 — MSET / MGET

目的複数キーの一括操作を確認する
操作MSET → MGET
確認する
ポイント
設定した値が一括で取得できる
復習
全体像
String
TTL
Hash
List
Set
Sorted Set
まとめ
解説

TTL(有効期限)の概念

TTL(Time To Live)
キーの有効期限
期限が切れたキーは自動的に削除される
セッション情報やキャッシュなど
一定時間で不要になるデータに使う
復習
全体像
String
TTL
Hash
List
Set
Sorted Set
まとめ
コマンド

EXPIRE / TTL / PTTL

$ EXPIRE key seconds$ TTL key
EXPIRE key secondsキーの有効期限を秒単位で設定する
TTL key残り有効期限を秒単位で返す(-1: 期限なし、-2: キーなし)
PTTL key残り有効期限をミリ秒単位で返す
復習
全体像
String
TTL
Hash
List
Set
Sorted Set
まとめ
実演

実演 — TTL の設定と確認

目的TTL の設定と期限切れの動作を確認する
操作SET → EXPIRE → TTL → 待機 → GET
確認する
ポイント
期限切れ後に GET すると nil が返る
復習
全体像
String
TTL
Hash
List
Set
Sorted Set
まとめ
解説

Hash 型とは

Hash 型
フィールドと値のペアの集合
1 つのキーの中に複数のフィールドを持てる
ユーザー情報のようなオブジェクトの表現に適している
復習
全体像
String
TTL
Hash
List
Set
Sorted Set
まとめ
コマンド

HSET / HGET / HGETALL / HDEL

$ HSET key field value [field value ...]$ HGETALL key
HSETフィールドに値を設定する
HGETフィールドの値を取得する
HGETALLすべてのフィールドと値を取得する
HDELフィールドを削除する
復習
全体像
String
TTL
Hash
List
Set
Sorted Set
まとめ
実演

実演 — Hash 型の基本操作

目的Hash 型の基本操作を確認する
操作HSET → HGET → HGETALL → HDEL
確認する
ポイント
フィールド単位での読み書きと削除
復習
全体像
String
TTL
Hash
List
Set
Sorted Set
まとめ
コマンド

HMGET / HINCRBY

$ HMGET key field [field ...]$ HINCRBY key field increment
HMGET複数フィールドの値を一括取得する
HINCRBYフィールドの値を指定した数だけ増やす
復習
全体像
String
TTL
Hash
List
Set
Sorted Set
まとめ
解説

String + JSON vs Hash の比較

String + JSON
1 フィールドだけ更新したい場合も全体を読み書きする必要がある
Hash
フィールド単位で読み書きできる
復習
全体像
String
TTL
Hash
List
Set
Sorted Set
まとめ
図解

String に JSON を格納する方法との比較

age だけを更新したい場合の手順の違い

復習
全体像
String
TTL
Hash
List
Set
Sorted Set
まとめ
解説

List 型とは

List 型
順序付きの文字列コレクション
先頭と末尾の両方から要素を追加・取得できる
キュー(FIFO)やスタック(LIFO)として使える
復習
全体像
String
TTL
Hash
List
Set
Sorted Set
まとめ
図解

キューとスタックの構造

追加と取り出しの方向の組み合わせで動作が変わる

復習
全体像
String
TTL
Hash
List
Set
Sorted Set
まとめ
コマンド

LPUSH / RPUSH / LPOP / RPOP

$ RPUSH key element [element ...]$ LPOP key
LPUSH / RPUSH先頭 / 末尾に要素を追加する
LPOP / RPOP先頭 / 末尾の要素を取り出す(削除される)
復習
全体像
String
TTL
Hash
List
Set
Sorted Set
まとめ
コマンド

LRANGE / LLEN / LINDEX

$ LRANGE key start stop
LRANGE key start stop指定範囲の要素を取得する(削除しない)
LLEN keyリストの要素数を返す
LINDEX key index指定位置の要素を取得する
復習
全体像
String
TTL
Hash
List
Set
Sorted Set
まとめ
実演

実演 — List 型の操作とキューの実現

目的List 型の操作とキュー(FIFO)の動作を確認する
実行する
コマンド
$ RPUSH tasks "task1" "task2" "task3"$ LPOP tasks
確認する
ポイント
先に入れた要素が先に取り出される(FIFO)
復習
全体像
String
TTL
Hash
List
Set
Sorted Set
まとめ
解説

ブロッキングポップ — BRPOP / BLPOP

ブロッキングポップ
リストに要素が追加されるまで待機する
BLPOP key [key ...] timeout
先頭から取り出す(待機あり)
BRPOP key [key ...] timeout
末尾から取り出す(待機あり)
timeout に 0 を指定すると無期限に待機する
復習
全体像
String
TTL
Hash
List
Set
Sorted Set
まとめ
解説

Set 型とは

Set 型
一意な値の順序なし集合
同じ値を複数回追加しても 1 つだけ保持される
和集合・積集合・差集合の集合演算ができる
復習
全体像
String
TTL
Hash
List
Set
Sorted Set
まとめ
コマンド

SADD / SMEMBERS / SISMEMBER / SREM

$ SADD key member [member ...]$ SMEMBERS key
SADD要素を追加する
SMEMBERSすべての要素を取得する
SISMEMBER要素が含まれるか確認する(1: あり、0: なし)
SREM要素を削除する
復習
全体像
String
TTL
Hash
List
Set
Sorted Set
まとめ
コマンド

SUNION / SINTER / SDIFF — 集合演算

$ SINTER key [key ...]
SUNION和集合(いずれかに含まれる要素)
SINTER積集合(すべてに共通する要素)
SDIFF差集合(最初の集合にだけ含まれる要素)
復習
全体像
String
TTL
Hash
List
Set
Sorted Set
まとめ
図解

Set 型の集合演算

SUNION・SINTER・SDIFF が取り出す領域

復習
全体像
String
TTL
Hash
List
Set
Sorted Set
まとめ
実演

実演 — Set 型の操作と集合演算

目的Set 型の基本操作と集合演算を確認する
実行する
コマンド
$ SADD tag:redis "user1" "user2" "user3"$ SINTER tag:redis tag:nosql
確認する
ポイント
重複排除と集合演算の動作
復習
全体像
String
TTL
Hash
List
Set
Sorted Set
まとめ
解説

Sorted Set 型とは

Sorted Set 型
スコア付きの一意な要素の集合
要素はスコアの昇順で自動的にソートされる
ランキングやリーダーボードの実現に適している
復習
全体像
String
TTL
Hash
List
Set
Sorted Set
まとめ
コマンド

ZADD / ZRANGE / ZRANK / ZSCORE

$ ZADD key score member [score member ...]$ ZRANGE key start stop [WITHSCORES]
ZADDスコア付きで要素を追加する
ZRANGEスコア昇順で範囲取得する
ZRANK要素の順位を返す(0 始まり、昇順)
ZSCORE要素のスコアを返す
復習
全体像
String
TTL
Hash
List
Set
Sorted Set
まとめ
実演

実演 — Sorted Set でランキング

目的Sorted Set によるランキングの動作を確認する
実行する
コマンド
$ ZADD leaderboard 100 "Alice" 250 "Bob"$ ZRANGE leaderboard 0 -1 REV WITHSCORES
確認する
ポイント
スコアの順序で自動ソートされる
復習
全体像
String
TTL
Hash
List
Set
Sorted Set
まとめ
解説

Set と Sorted Set の使い分け

Set を選ぶ場面
順序が不要で、一意性の管理や集合演算が目的
Sorted Set を選ぶ場面
スコアによる順序が必要(ランキング、優先度付きキュー)
Sorted Set は Set より多くのメモリを消費する
スコア分
復習
全体像
String
TTL
Hash
List
Set
Sorted Set
まとめ
まとめ

この章のまとめ

String — 基本的な値の格納、アトミックカウンタ、一括操作
Hash — フィールド単位の読み書き、オブジェクトの表現
List — 順序付きコレクション、キュー / スタック
Set — 一意な値の管理、集合演算
Sorted Set — スコア付き順序集合、ランキング
TTL — キーの有効期限の設定と自動削除
次章: データ構造(応用編)
復習
全体像
String
TTL
Hash
List
Set
Sorted Set
まとめ