はじめに
最近、シンプルなWebアプリ作成にハマっているのですが、
少し高度なアプリを作る時には、
やはりデータベースを使いたくなります。
データベースというと、
MySQLなどのリレーショナルデータベースが有名ですが、
SQLが少し特殊な感じがしたので、
もう少し簡単に使えて、かつHeroku上で
無料で使えるDBは無いかと探した所、
redisというDBを見つけました。
今回は、このredisの基本的な使い方のメモ
を説明したいと思います。
redisとは?
redisはkey value store(KVS)と呼ばれるデータベースの一つです。
キーとデータが一つの要素として管理されます。
このキーとデータに関しては、
プログラミングの変数名と値のようなものなので、
プログラミングをしたことがある人には馴染み深い気がします。
redisの特徴としては、
データをメモリ上に保持するので、
データのセットや取得が非常に早いという特徴があります。
また、key - valueの値に単純な文字列だけでなく、
リストやセット、ハッシュ、ビットなどを登録することができ、
プログラミングの基本的な構造体をそのまま保存することができます。
また、ソートや集合演算など、簡単なDB解析に関しては、
APIを使ってredis上で実行することができます。
また、redisの基本的な内容を網羅的に学びたい場合は、
下記のドットインストールのクラスがおすすめです。
redisの使い方
Macへのredisのインストール
ローカル環境で開発をする時用に、
Macへredisをインストールします。
Homebrewを使っている場合は下記でOKです。
brew install redis
redis-serverをMacで起動 (バックプロセスで)
redis-server /usr/local/etc/redis.conf &
redisのコマンドラインツールの起動
redis-cli
コマンドラインツールを終わらせる場合は、
exit
redisサーバを止める場合は、(データがDBに保存される)
shutdown
redisのデータをすべて削除したい場合は
flushall
データベースの設定
普通redisのDBは0-15まであり、下記のコマンドで設定できる
select 1
データのディスクへの保存
メモリ上のDBのデータをディスクに保存
bgsave
文字列の保存と取得
一つの文字列の保存
set hoge a
複数の文字列の保存
mset hoge a huga b
一つのデータの取得
get hoge
複数のデータの取得
mget hoge huga
また、incr/ decr で数値のインクリメント、デクリメントも可能
key関連のツール
keys : キーの表示
del (key) : キーの削除
rename pkey key : キーの名前変更
expire key num sec: secの秒数のみ有効にする
randamkey: ランダムにキーを取得する
flushdb: すべてのDBのデータを削除する
リストの操作
追加: (l/r) push
削除: (l/r) pop
リスト長さ: llen
リストのある範囲のデータを取得: lrange
リストの一部を削除: ltrim
Pythonでredisを使う
redis-pyというredis用のクライアントを使うと、
簡単にPythonでredisを使うことができます。
自分のようにWebサーバでPythonを使っている場合は、
redis-puを使うことで簡単にredisに繋がることができます。
Python用クライアント redis-pyのインストール
pipを使って、下記でインストールできます。
pip install redis
redis-pyの使い方
下記のリンク先を見れば、
ほぼすべての使い方がわかるはずです。
moco(beta)'s backup: [Tips] Python から Redis を使う (1) ~ STRING を操作する ~
moco(beta)'s backup: [Tips] Python から Redis を使う (2) ~ HASH を操作する ~
moco(beta)'s backup: [Tips] Python から Redis を使う (3) ~ LIST を操作する ~
moco(beta)'s backup: [Tips] Python から Redis を使う (4) ~ SET を操作する ~
moco(beta)'s backup: [Tips] Python から Redis を使う (5) ~ SORTED SET を操作する...
moco(beta)'s backup: [Tips] Python から Redis を使う (6) ~ SORTED SET を操作する...
moco(beta)'s backup: [Tips] Python から Redis を使う (7) ~ SORTED SET を操作する...
HerokuでPythonアプリでRedisを使う
Heroku上のアプリでredisを使う場合は、
heroku-redisというアドオンを使うことで
データ量25MBまで無料で簡単に使うことができます。
(他にいくつかredis用のアドオンはありますが、
このアドオンが一番無料枠が多いみたいです)
使い方としては、
下記のリンクで、ログインして、アプリ名を指定してアドオンを追加すればOKです。
Heroku Redis - Add-ons - Heroku Elements
すると、herokuの環境変数 REDIS_URLにURLの形で、
redisサーバのホスト名やパスワードなどが設定されます。
あとは、アプリのコードからredis-serverにつながればOKです。
コードとしては、下記のように環境変数を取得して、
クライアントでつながればOKです。
下記のコードを使えば、ローカル環境とheroku環境の両方で、
redisに繋がることができます。
import os import redis if os.getenv("REDIS_URL")!=None: r = redis.from_url(os.environ.get("REDIS_URL")) else: HOST='localhost' PORT=6379 DB=0 r=redis.Redis(host=HOST, port=PORT, db=DB)
また、heroku上のredisに繋がるにはコマンドラインツールを使うといいです。
下記のコマンドでインストールして
heroku addons:create heroku-redis:hobby-dev
下記のコマンドでコマンドラインインターフェイスが使えるようになります。
heroku redis:cli
参考資料
MyEnigma Supporters
もしこの記事が参考になり、
ブログをサポートしたいと思われた方は、
こちらからよろしくお願いします。