MyEnigma

とある自律移動システムエンジニアのブログです。#Robotics #Programing #C++ #Python #MATLAB #Vim #Mathematics #Book #Movie #Traveling #Mac #iPhone

Web初心者のためのシンプルなデータベースredis入門

はじめに

最近、シンプルな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に繋がることができます。

myenigma.hatenablog.com

Python用クライアント redis-pyのインストール

pipを使って、下記でインストールできます。

pip install redis

redis-pyの使い方

下記のリンク先を見れば、

ほぼすべての使い方がわかるはずです。

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.hatenablog.com

myenigma.hatenablog.com

MyEnigma Supporters

もしこの記事が参考になり、

ブログをサポートしたいと思われた方は、

こちらからよろしくお願いします。

myenigma.hatenablog.com