[python] redisでよく使うコマンド

# redis-py を使うよ！

https://redis-py.readthedocs.io/

## インストール

```shell
pip install redis
```

## 使い方
### 前提条件
```python
import redis
connection_pool = redis.ConnectionPool(
    host=host,
    port=port,
    db=db,
    password=password
)
r = redis.StrictRedis(connection_pool=connection_pool)
key = 'key'
value_string = 'value'
value_hash = {'hoge': 'A', 'foo': 'B'}
ttl = 60
```

### コマンド説明
|type|コマンド|説明|
|-|-|-|
|共通|r.type(key)|keyのタイプを確認|
|共通|r.expire(key, ttl) |生存期間を秒で設定|
|共通|r.keys(key)|keyの有無確認|
|共通|r.dbsize()|レコード数|
|共通|r.delete(key)|keyの削除|
|string|r.set(key, value_string)|key, value_string を生存期間なしで登録|
|string|r.set(key, value_string, ex=ttl)|key, value を生存期間を指定して登録|
|string|r.get(key)|keyの値を取得|
|hash|r.hset(key, mapping=value_hash)|key, value を生存期間なしで登録|
|hash|r.hgetall(key)|keyの値を取得|
|hash|r.hlen(key)|keyの辞書内のリスト長を取得|
|hash|r.hget(key, 'hoge')|keyの辞書内'hoge'の値を取得|
|hash|r.hexists(key, 'hoge')|keyの辞書内'hoge'の有無確認|
|hash|r.hdel(key, 'hoge')|keyの辞書内'hoge'の値を削除|
|hash|r.hkeys(key)|keyの辞書内のkey一覧を取得|
|hash|r.hvals(key)|keyの辞書内のvalue一覧を取得|
|list|r.lpush(key, value_string)|keyのリストの最初にvalue_stringを追加|
|list|r.rpush(key, value_string)|keyのリストの最後にvalue_stringを追加|
|list|r.lpop(key)|keyのリストの最初の値を取得|
|list|r.rpop(key)|keyのリストの最後の値を取得|
|list|r.lrange(key, 0, -1)|keyの全リスト出力|
|list|r.llen(key)|keyのリスト長|


## TIPS
リストを一度に登録できないので、一度づつ登録する必要があるが、登録するときは pipeline を使うと使わないより 78倍速いらしい。(SQLのトランザクションもそんな感じだったなぁ)

```python
value_list = [1, 2, 3]
pipe = r.pipeline()
for value in value_list:
    pipe.rpush(key, value)
pipe.execute()
```

### ここに書いてあった

https://stackoverflow.com/questions/6504861/batch-value-insert-in-redis-list

## 検証用

```python
print('-'*80)
print('TYPE: string')
print('-'*80)
print('set', r.set(key, value_string))
print('ttl', r.ttl(key))
print('set', r.set(key, value_string, ex=ttl))
print('type', r.type(key))
print('get', r.get(key))
print('expire', r.expire(key, ttl))
print('ttl', r.ttl(key))
print('delete', r.delete(key))

print('-'*80)
print('TYPE: hash')
print('-'*80)
print('hset', r.hset(key, mapping=value_hash))
print('hset', r.hset(key, mapping=value_hash))
print('hset', r.hset(key, mapping={'bar': 'c'}))
print('type', r.type(key))
print('hget', r.hget(key, 'hoge'))
print('hgetall', r.hgetall(key))
print('hkeys', r.hkeys(key))
print('hvals', r.hvals(key))
print('ttl', r.ttl(key))
print('expire', r.expire(key, ttl))
print('ttl', r.ttl(key))
print('hlen', r.hlen(key))
print('hexists', r.hexists(key, 'hoge'))
print('hdel', r.hdel(key, 'hoge'))
print('delete', r.delete(key))

print('-'*80)
print('TYPE: list')
print('-'*80)
print('rpus', r.rpush(key, '1'))
print('rpus', r.rpush(key, '2'))
print('rpus', r.rpush(key, '3'))
print('lpus', r.lpush(key, 'A'))
print('lpus', r.lpush(key, 'B'))
print('lpus', r.lpush(key, 'C'))
print('lrange', r.lrange(key, 0, -1))
print('lpop', r.lpop(key))
print('rpop', r.rpop(key))
print('lrange', r.lrange(key, 0, -1))
print('llen', r.llen(key))
print('ttl', r.ttl(key))
print('expire', r.expire(key, ttl))
print('ttl', r.ttl(key))
print('delete', r.delete(key))
```

出力結果
```
--------------------------------------------------------------------------------
TYPE: string
--------------------------------------------------------------------------------
set True
ttl -1
set True
type b'string'
get b'value'
expire True
ttl 60
delete 1
--------------------------------------------------------------------------------
TYPE: hash
--------------------------------------------------------------------------------
hset 2
hset 0
hset 1
type b'hash'
hget b'A'
hgetall {b'hoge': b'A', b'foo': b'B', b'bar': b'c'}
hkeys [b'hoge', b'foo', b'bar']
hvals [b'A', b'B', b'c']
ttl -1
expire True
ttl 60
hlen 3
hexists True
hdel 1
delete 1
--------------------------------------------------------------------------------
TYPE: list
--------------------------------------------------------------------------------
rpus 1
rpus 2
rpus 3
lpus 4
lpus 5
lpus 6
lrange [b'C', b'B', b'A', b'1', b'2', b'3']
lpop b'C'
rpop b'3'
lrange [b'B', b'A', b'1', b'2']
llen 4
ttl -1
expire True
ttl 60
delete 1
```