---
# System prepended metadata

title: Redis
tags: [redis]

---

###### tags: `redis`

# Redis 
- インメモリDB
- 高速
- 定期保存である程度の永続性担保

の キー　バリュー ストア

# キー
DBのデータの保存は基本的に、
`key: data`
となる
## キーの補助コマンド
- keys [pattern] : パターンにハマるkeyを表示。ワイルドカードが使える*
- exsits key : 存在すれば1、しなければ0
- rename key newkey : キーをリネーム(リネーム先がある場合は上書き)
- del key : キーを消す
- expire key second : キーに期限をつける(セッション管理など)
- randomkey : 存在するキーをランダムに返す
 


# データ型
基本は5つ
- String
- List
- Set
- Sorted Set(zset)
- Hash

キーに入っているデータ型を知るには typeコマンド
```
type key
```

# String
```redis=
set key value
get key

mset key1 val1 key2 val2
mget key1 val1 
```

# List
並び替えは得意ではない
時系列順データを扱うのに優れる
lpushのlはlistではなく left
代表的なコマンド
```
// push系
lpush key 1 2 3 4 5 // 左にプッシュする [5, 4, 3, 2, 1]
rpush 9 8 7 6 // 右にプッシュする [5, 4, 3, 2, 1, 9, 8, 7, 6]
// pop系
lpop
rpop
// 参照系
lrange key 0 -1  
lindex key 4 // 4番目を見る
llen    // 長さを見る
// トリミング(破壊的メソッド)
ltrim key 1 3
```

# Hash

key valueセット
ただし、valueの中に更に key valueをセットできる

set : hset, hmset
get : hget, hmset
 
hset hash key, value
hmset hash key1 value1 key2 value2 .....
 
hlen  hash
hkeys hash
hvals hash
hgetall hash
 
h=hash , m=multi

```redis
hset user name taguchi
hmset user email taguchi@gmail.com score 120
hget user name email score
hget
```

# Sortコマンド
- List
- Set
- Sorted Set
のタイプに使える

タイプを調べるには type コマンド
```redis
type sort or set or sortedset
```

sort list : 昇順に並べる
sort list desc limit 0 3: 0から3番目までを降順に並べる
sort list alpha : 数値ではない、文字列をアルファベット順に並べる



# multi / exec 
Transactionっぽいもの
処理の途中でマシンが落ちると、ロールバックなどがされない
よって正確なTransactionではないので　「っぽいもの」

複数処理をまとめて行う

- multi : 複数処理の定義のはじめ
- exec/discard : 実行/やっぱやめる

## 書き方
multi/
処理
処理
処理
exec/discard

multi ~ exec or discard の間の処理は連続で行われ
別の処理が割り込んだりしない

```redis
multi
incr counter
incr visitor
exec
```


# コマンドまとめ

String
```
set <key> <val>
get <key>
mset
mget
```
String(int)
```
// 数値の操作をできる
// ++/--
incr 
decr
// 一気に増減
incrby <key> <num>
decrby <key> <num>
```

Key
```
keys <pattern> // * ワイルドカード使える
exists <key>
rename <old> <new>
del <key>
expire <key> <terms>
randomekey
```

List(l)
```
// push/pop
l/rpush <key> <el>
l/rpop <key> <el>

// 参照系
lrange <key> <start> <end>
llen <key>
lindex <key> <index>
// 破壊的トリミング
ltrim <key> <start> <end>
```

Set(s)
```
// add/remove
sadd <key> <val>
srem <key> <val>

// メンバー参照
smembers <key>
```

Sorted Set (zと表記)
```
// add/remove
zadd <key> <score:int> <val>
zrem <key> <val>

// ランキング順に並べる
zrange <key> 0 -1
```