インフラエンジニアがいざという時に抑えておきたい sidekiq の中身を redis-cli を使って確認する流れ


### redis-cli を使ってログイン

```bash
$ redis-cli -h host -p port -a password
```

| コマンド	| 説明 |
|----------|-----|
| `KEYS *` | redis に登録されているキーの一覧を取得 |
| `TYPE <key>` |	`VALUE` の種類 |
| `GET <key>` | `TYPE` が string だった場合の値をみる |
| `LRANGE <key> 0 -1` | `TYPE` が list だった場合の値をみる |
| `SMEMBERS <key>` | `TYPE` が set だった場合の値をみる |
| `ZRANGE <key> 0 -1` | `TYPE` が zsetだった場合の値をみる |
| `HGETALL <key>` | `TYPE` が hash だった場合の値をみる |
| `HKEYS <key>` | `TYPE` が hash だった場合に field の一覧をみる |
| `HVALS <key>` | `TYPE` が hash だった場合に value の一覧をみる |
| `MONITOR` | redisサーバが受けとったコマンドを表示する |

### sidekiq が使っている key を確認する

```bash
host:port>  KEYS 'sidekiq:*'`
 1) "sidekiq:worker.x.x:x:xxxxxx"
 2) "sidekiq:worker.x.x:x:xxxxxx"
 3) "sidekiq:queues"
 4) "sidekiq:worker.x.x:x:xxxxxx"
 5) "sidekiq:dead"
 6) "sidekiq:processes"
 7) "sidekiq:worker.x.x:x:xxxxxx"
 8) "sidekiq:worker.x.x:x:xxxxxx:workers"
 9) "sidekiq:worker.x.x:x:xxxxxx"
10) "sidekiq:worker.x.x:x:xxxxxx"
11) "sidekiq:worker.x.x:x:xxxxxx:workers"
12) "sidekiq:stat:processed:2017-04-14"
13) "sidekiq:stat:failed"
14) "sidekiq:worker.x.x:x:xxxxxx"
15) "sidekiq:worker.x.x:x:xxxxxx"
16) "sidekiq:worker.x.x:x:xxxxxx"
17) "sidekiq:worker.x.x:x:xxxxxx:workers"
18) "sidekiq:worker.x.x:x:xxxxxx:workers"
19) "sidekiq:schedule"
20) "sidekiq:worker.x.x:x:xxxxxx"
21) "sidekiq:stat:processed"
22) "sidekiq:worker.x.x:x:xxxxxx"
23) "sidekiq:worker.x.x:x:xxxxxx:workers"
24) "sidekiq:retry"
25) "sidekiq:worker.x.x:x:xxxxxx"
```

![Sidekiq.jpg](https://qiita-image-store.s3.amazonaws.com/0/18843/cbc68dea-2161-1454-40f4-30622f797462.jpeg "Sidekiq.jpg")



### １つ１つの queue の数を把握する

queue の type を調べる

```bash
host:port> type "sidekiq:queues"
set
```

queue の種類を調べる

```bash
host:port> smembers  "sidekiq:queues"
1) "search"
2) "push"
3) "outgoing_webhook"
4) "default"
```

```bash
host:port> LLEN  "sidekiq:queues:search"
(integer) 0
host:port> LLEN  "sidekiq:queues:push"
(integer) 0
・・・・
```

### 現在スケジューリングされている job を確認する

schedule の type を調べる

```bash
host:port> type "sidekiq:schedule"
zset
```

最初の１件

```bash
host:port> ZRANGE "sidekiq:schedule" 0 0
1) "{\"class\":\"Elasticsearch\",\"args\":[\"message\",hoge,\"index\"],\"retry\":true,\"queue\":\"elasticsearch\",\"jid\":\"xxxxxxxxxxx\",\"created_at\":xxxxxx}"
```

ざっくり 5 件調べる

```bash
host:port> ZRANGE "sidekiq:schedule" 0 4
1) "{\"class\":\"Elasticsearch\",\"args\":[\"message\",hoge,\"index\"],\"retry\":true,\"queue\":\"elasticsearch\",\"jid\":\"xxxxxxxxxxx\",\"created_at\":xxxxxx}"
2) "{\"class\":\"Elasticsearch\",\"args\":[\"message\",hoge,\"index\"],\"retry\":true,\"queue\":\"elasticsearch\",\"jid\":\"xxxxxxxxxxx\",\"created_at\":xxxxxx}"
3) "{\"class\":\"Elasticsearch\",\"args\":[\"message\",hoge,\"index\"],\"retry\":true,\"queue\":\"elasticsearch\",\"jid\":\"xxxxxxxxxxx\",\"created_at\":xxxxxx}"
4) "{\"class\":\"Elasticsearch\",\"args\":[\"message\",hoge,\"index\"],\"retry\":true,\"queue\":\"elasticsearch\",\"jid\":\"xxxxxxxxxxx\",\"created_at\":xxxxxx}"
5) "{\"class\":\"Elasticsearch\",\"args\":[\"message\",hoge,\"index\"],\"retry\":true,\"queue\":\"elasticsearch\",\"jid\":\"xxxxxxxxxxx\",\"created_at\":xxxxxx}"
```

今予定しているJobを全部見る

```bash
host:port> ZRANGEBYSCORE "sidekiq:schedule" -inf +inf
```

一個削除したい

```bash
host:port> ZREM schedule "{\"class\":\"Elasticsearch\",\"args\":[\"message\",hoge,\"index\"],\"retry\":true,\"queue\":\"elasticsearch\",\"jid\":`\"xxxxxxxxxxx\",\"created_at\":xxxxxx}"
```

もうはいってるもの全部消して復旧させたい

```bash
host:port>  FLUSHALL
OK
```