redisの使い方
サーバのインストール
ubuntu, debian
$ sudo apt install redis-server
osx
$ brew install redis
osxでのサービス化の方法
サービス登録
$ brew services start redis
サービス登録解除&ストップ
$ brew services stop redis
コンテナなどで手動起動する
- 概要
- コンテナなどsystemdが省略されている環境などでは手動起動する必要がある
通常起動
$ redis-server
ログレベルを設定して起動
$ redis-server --loglevel warning
スナップショットの無効化
/etc/redis/redis.conf
を編集し、バックアップする機能を無効化する- 編集の後
systemctl restart redis
を行う
# save 900 1 # コメントアウト
# save 300 10 # コメントアウト
# save 60 10000 # コメントアウト
save ""
clientのインストール
python
$ python3 -m pip install redis
pythonからの使用例
import redis
r = redis.Redis(host='localhost', port=6379, decode_responses=True, ssl=False, username=None, password=None)
r.flushdb() # DBをすべてクリア ref. https://stackoverflow.com/questions/45916183/how-do-i-to-flush-redis-db-from-python-redis
r.set('foo', 'bar')
print(r.get('foo')) # bar
r.hset("keyname", "key", "value")
print(r.hget("keyname", "key")) # value
r.hset("keyname:1", "key", 1)
print(r.hgetall("keyname:1")) # {'key': '1'}
redisのnamespaceについて
- 同じredisの保持するkvsにたいして、key対してprefixをつけることでnamespaceを分割することができる
- redisのマネージドインスタンスはそこそこの金額がすることもあり、費用の観点からnamespaceを分割するのは有用
redisのexpire設定について
- キーの寿命を設定する
- セッション管理
- 広告などの頻度コントロール
ex
の指定時間単位は秒
r.set('foo', 'bar', ex=60)
# or
r.expire('foo', ex=60)
特定のnamespaceのデータを消す
REDIS_PREFIX = "A_NAMESPACE"
for key in r.scan_iter(f"{REDIS_PREFIX}:*"):
r.delete(key)