redis-cliでよく使うコマンド20選

最近Redisを触り始めたので、[ドキュメント](https://redis.io/)読みながら使用していたコマンドについて書いていきます。

## 準備

redis-cliを使う準備をします。
#### 1. Redisのインストール
MacならbrewでInstall出来ます

```
$ brew install redis
```

#### 2. Redisの起動

```bash
$ redis-server
または
$ redis-server --daemonize yes
```

#### 3. redis-cliの起動

CLIが立ち上がります

```bash
$ redis-cli
127.0.0.1:6379>
```

## コマンド一覧
ちなみにRedisのバージョンは 6.0.8時点です。

```
$ redis-server --version
Redis server v=6.0.8 sha=00000000:0 malloc=libc bits=64 build=25b38681eed52ae
```

### 1. SET
キーと値をRedisに登録する。すでにキーが存在していたら、上書きする。

```bash
redis> SET sample_key_1 "Hello Redis!"
OK
redis> SET sample_key_1 "Bye Redis!"
OK
redis> GET sample_key_1
Bye Redis! 
```

### 2. GET

キーの値を取得する

```bash
redis> SET sample_key_1 "Hello Redis!"
OK
redis> GET sample_key_1
Hello Redis!
```

### 3. SETNX
キーと値をRedisに登録する。
すでにキーが存在していても、上書きをしない。

```bash
redis> SET sample_key_1 "Hello Redis!"
OK
redis> SETNX sample_key_1 "Hello Redis!"
0
redis> GET sample_key_1
Hello Redis!
```

### 4. MSET
複数のキーと値を一括で登録する

```bash
redis> MSET sample_key_1 "Hello Redis!" sample_key_2 "Bye Redis!"
OK
redis> GET sample_key_1
Hello Redis!
redis> GET sample_key_2
Bye Redis!

```


### 5. MGET
複数のキーと値を一括で取得する

```bash
redis> MSET sample_key_1 "Hello Redis!" sample_key_2 "Bye Redis!"
OK
redis> MGET sample_key_1 sample_key_2
1) "Hello Redis!"
2) "Bye Redis!"

```

### 6. INCR
キーの値を1つインクリメントする

```bash
redis> SET sample_count 10
OK
redis> GET sample_count
10
redis> INCR sample_count
11
redis> GET sample_count
11
```

### 7. HSET / 8. HGET
HSET：hashを登録する
HGET：hashを取得する

```bash
redis> HSET hash sample_hash_key "hash_sample_value"
1
redis> HGET hash sample_hash_key
hash_sample_value
```
 
### 9. DEL
指定されたキーを削除する

```bash
redis> GET sample_key_1
Hello Redis!
redis> DEL sample_key_1
1
redis> GET sample_key_1
null
```

### 10. LPUSH / 11. RPUSH
LPUSH：リストの先頭に、指定されたすべての値を挿入する
RPUSH：リストの末尾に、指定されたすべての値を挿入する

```bash
redis> LPUSH sample_list "LPUSH 1" "LPUSH 2"
(integer) 2
redis> RPUSH sample_list "RPUSH 1" "RPUSH 2" "RPUSH 3"
(integer) 5
```

### 12. LRANGE
リストの中身のうち、1つめの引数の値から2つめの引数の値の間のIndexを取得する

```bash
redis> LPUSH sample_list "LPUSH 1" "LPUSH 2"
(integer) 2
redis> RPUSH sample_list "RPUSH 1" "RPUSH 2" "RPUSH 3"
(integer) 5
redis> LRANGE sample_list 0 1
1) "LPUSH 2"
2) "LPUSH 1"
redis> LRANGE sample_list 0 10
1) "LPUSH 2"
2) "LPUSH 1"
3) "RPUSH 1"
4) "RPUSH 2"
5) "RPUSH 3"
redis>> LRANGE sample_list 0 1
1) "LPUSH 2"
2) "LPUSH 1"
redis>> LRANGE sample_list 2 4
1) "RPUSH 1"
2) "RPUSH 2"
3) "RPUSH 3"
```

### 13. LINDEX
リストの中身のうち指定されたIndex番目のValueを取得する

```bash
redis> LPUSH sample_list "LPUSH 1" "LPUSH 2"
(integer) 2
redis> RPUSH sample_list "RPUSH 1" "RPUSH 2" "RPUSH 3"
(integer) 5
127.0.0.1:6379> LRANGE sample_list 0 10
1) "LPUSH 2"
2) "LPUSH 1"
3) "RPUSH 1"
4) "RPUSH 2"
5) "RPUSH 3"
redis> LINDEX sample_list 0
"LPUSH 2"
redis> LINDEX sample_list 3
"RPUSH 2"
```

### 14. LPOP / 15. RPOP
LPOP：リストの最初の要素を削除する
RPOP：リストの最後の要素を削除する

```bash
redis> LPUSH sample_list "LPUSH 1" "LPUSH 2"
(integer) 2
redis> RPUSH sample_list "RPUSH 1" "RPUSH 2" "RPUSH 3"
(integer) 5
127.0.0.1:6379> LRANGE sample_list 0 10
1) "LPUSH 2"
2) "LPUSH 1"
3) "RPUSH 1"
4) "RPUSH 2"
5) "RPUSH 3"
127.0.0.1:6379> LPOP sample_list
"LPUSH 2"
127.0.0.1:6379> LRANGE sample_list 0 10
1) "LPUSH 1"
2) "RPUSH 1"
3) "RPUSH 2"
4) "RPUSH 3"
127.0.0.1:6379> RPOP sample_list
"RPUSH 3"
127.0.0.1:6379> LRANGE sample_list 0 10
1) "LPUSH 1"
2) "RPUSH 1"
3) "RPUSH 2"
```

### 16. KEYS
指定したパターンに一致するキーをすべて取得する

```bash
redis> KEYS *
1) "sample_key_2"
2) "sample_hash"
3) "hash"
4) "sample_count"
5) "sample_key_1"
redis> KEYS sample*
1) "sample_key_2"
2) "sample_hash"
3) "sample_count"
4) "sample_key_1"
redis> KEYS sample*key*
1) "sample_key_2"
2) "sample_key_1"
```

### 17. EXPIRE
キーのタイムアウトを設定する。タイムアウトになると、キーが自動的に削除される。

```bash
redis> SET expire_key "EXPIRE Value!"
OK
redis> GET expire_key
EXPIRE Value!
redis> EXPIRE expire_key 3
1
redis> TTL expire_key
-2
redis> GET expire_key
null
```

### 18. TTL
タイムアウトのあるキーの残りの存続時間を返す
- -2を返す場合、キーが存在しない
- -1を返す場合、キーは存在するが、有効期限が関連付けられていない

```bash
redis> SET expire_key "EXPIRE Value!"
OK
redis> TTL expire_key
-1
redis> EXPIRE expire_key 10
1
redis> TTL expire_key
5
redis> TTL expire_key
-2
```

### 19. MULTI / 20. EXEC 
MULTI：トランザクションの開始
EXEC：トランザクションの実行

```bash
redis> SET transaction_key "Start Transaction!"
QUEUED
redis> EXPIRE transaction_key 10
QUEUED
redis> TTL transaction_key
QUEUED
redis> EXEC
1) OK
2) (integer) 1
3) (integer) 10
```

### 終わりに
この記事での紹介は14個くらいのコマンドになりました。また気になったものがあれば追記します。

Redisのコマンドについてはこのドキュメントに沢山載っています。
https://redis.io/commands

ご参考ください。