Redisの機能紹介#基本コマンド編
作成日時: 2025/09/13
更新日時: 2025/09/18
# はじめに
次の記事(WIP)でRedisの細かい機能やバージョン`6.x`やバージョン`7.x`の機能を紹介するため、
この記事はその前の基本コマンド編になります。
# 環境
macOS Monterey 12.6
MacBook Air (M1, 2020)
redis-server 8.2.1
redis-cli 8.2.1
# 機能一覧
## 基本操作
### SET
データ登録。
```sh
SET key1 "haroot" # OK
```
#### EXオプション
作成するキーの**期限**を秒数で指定します。
```sh
SET key1 "haroot" EX 10 # 10秒後にキーの期限が切れます
```
#### XXオプション
既存でキーが**存在する場合のみ**、SETが成功します。
```sh
SET key1 "haroooot" XX # OK(登録成功)
SET key100 "haroooot" XX # nil(登録失敗)
```
#### GETオプション
SET時に**既存の値**を返します。
```sh
SET key1 "haroot_edit" GET # "haroot"
```
* ⭐️ **6.xの新機能**です。
* 既存の値がない場合、nilが返りますが登録は成功します。
```sh
SET key100 "haroot_edit" GET # nil
```
### GET
データ取得。
```sh
GET key1 # "haroot"
```
- `SET`コマンドのようなオプションはありません。
### KEYS
指定したパターンに一致するキー一覧の取得。
```sh
KEYS k* # key1 key2
```
#### 注意点
* ⚠️ `KEYS`は基本的に**デバッグ用のコマンド**です。
* limitの指定ができないので、データ量によっては**パフォーマンスに影響します。**
* 普段は`SCAN`コマンドを利用してください。
#### 指定できるパターン
- 0文字以上の任意の文字列: **`*`**
- `c*t`の場合
- ⭕️: `ct`,`cat`,`cuuuuut`
- ❌: `cute`
- 任意の1文字: **`?`**
- `c?t`の場合
- ⭕️: `cat`,`cute`
- ❌: `ct`,`cute`
- OR指定: **`[]`**
- `c[au]t`の場合
- ⭕️: `cat`,`cut`
- ❌: `cpt`,`ct`
- NOT指定: **`[^]`**
- `c[^a]t`の場合
- ⭕️: `cut`
- ❌: `cpt`,`ct`
- 範囲指定: **`[-]`**
- `c[a-e]t`の場合
- ⭕️: `cat`,`cbt`,`cet`
- ❌: `cpt`,`cut`
### SCAN
**キー一覧**の取得。
```sh
SCAN 0
```
* 取得する番号(カーソル)を指定する必要があります。
* 初めは`0`を指定し、スキャンしきれない残りは**レスポンスの1つ目の番号を指定**していきます。
* レスポンスの番号が`0`になれば、**それ以上項目**がないことを示します。
* 例
```sh
# 最初のリクエスト
SCAN 0
# レスポンス
1) "28"
2) 1) "cpt"
2) "cet"
3) ...
10) "cut"
##########
# リクエスト
SCAN 28
# レスポンス
1) "7"
2) 1) "ct"
2) "cuuuut"
3) ...
10) "cute"
##########
# リクエスト
SCAN 7
# レスポンス
1) "0"
2) 1) "cat"
2) "curl"
3) "cx"
```
* `KEYS`同様、パターンの指定も可能です。
* 他に`SSCAN`, `ZSCAN`, `HSCAN`コマンドがあります。
* `SSCAN key`: セット型(`SADD`)の特定キーの値一覧をスキャン
* `ZSCAN key`: ソート済みセット型(`ZADD`)の特定キーの値一覧をスキャン
* `HSCAN key`: ハッシュ型(`HSET`)の特定キーの値一覧をスキャン
### TTL
対象のキーの**期限**を取得。
```sh
# キーの期限がない場合
SET key1 "haroot"
TTL key1 # -1
# キーの期限がある場合
SET key1 "haroot" EX 10
TTL key1 # 10
# キーがない場合
TTL key100 #-2
```
#### レスポンス区分
- 正の値: 期限が切れるまでの**秒数**
- `-1`: 期限が設定されていない
- `-2`: キーが存在しない
### DEL
対象のキーを**削除**。
```sh
DEL key1 # 1
```