###### 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
```