インメモリデータベースmemchachedを使おう![python]

Webアプリケーションを実装する人なら普通につかってるというインメモリデータベースの1つmemcachedを使ってみましょう〜。(他にもREDISなんかもあります。AWS上だとElastic-Cacheが用意されており、memchached、redis両方に対応しています。)

インメモリデータベースって?

そもそもインメモリデータベースは、RDBMSの処理負荷が増えるのを防いである程度のDBとのデータのやりとりの処理を軽くするために、メモリ上にキャッシュとしてデータを残しておいたデータリクエストがきたときはそのキャッシュをみてキャッシュ上のデータを返すことでRDBの処理負荷を軽くし、またデータの読み取りを高速にやるために使われます。
また、このインメモリデータベースを並列化しさらにスケールすることもできます。

ただし、注意としては、インメモリデータベースを停止するとデータは永続化されません。
対してRedisは永続化されます。

実際の処理のイメージとしては、こんな感じ。

データリクエスト>
if インメモリデータベースがデータを持っている
インメモリデータベース上のデータを返す。
else
RDBを探しに行く。
探した結果をインメモリデータベースにキャッシュしておく。

基本的にデータはkeyに紐付けて保存しておきます。

さわってみよう

今回は、pythonでやる場合について書いておきます。(色々な言語でインターフェイスが用意されています。)
まずは、さっそくインストール

インストールが成功したら起動してみましょう。

一応これで起動しますが、私は、ログなんかをみながら開発をしたいので、こんな感じでオプションをつけて起動します。

-p ポート指定
-m メモリ
-vv ログ出力

そうするとログをはいて立ち上がります。
ログ

ログから127.0.0.1:11211で立ってることがわかります。

ここまででmemcachedによるインメモリデータベースが立ち上がったので、
実際にkey,value形式でデータの保存を試してみましょう。
まずはimport

はじめにデータをkeyに紐付けて保存してみましょう。

data = 'gehogeho'
memcachedclient = memcache.Client(['127.0.0.1:11211'])
memcachedclient.set("hogehoge", data)

memcachedclientでインメモリデータベースのホスト:ポートを指定してクライアントを設定します。
そして、このクライアントに対して”hogehoge”というキーでdataを保存します。

次に、データの取り出しです。データの取り出しではキーを指定してデータを取り出します。

memcachedclient = memcache.Client(['127.0.0.1:11211'])
cacheddata = memcachedclient.get("hogehoge")
print(cacheddata)

hogehogeをキーとしてデータを取り出します。するとdataで指定した”gehogeho”が返されているのを確認できるかと思います。
また、複数のキーを指定したい場合は、こんな感じでデータを取り出すこともできます。

memcachedclient = memcache.Client(['127.0.0.1:11211'])
cacheddata = memcachedclient.get_multi('key1', 'key2', 'key3');
print(cacheddata)

インメモリデータベース上のデータをすべて消す場合はflushしましょう。

memcachedclient.flush_all()

次回は、インメモリデータベースをつかった実際のサーバー構成についてでも書いていきたいなと思います〜

参考)