【Python】インメモリデータベースmemchachedの基本的な使い方

pythonPython
この記事は約4分で読めます。
スポンサードリンク

はじめに

インメモリデータベースとは?

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

また、インメモリデータベースを並列化して、さらにスケールすることもできます。

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

実際の処理のイメージとしては、以下のような感じです。

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

それでは、実際に触りながら理解していきましょう。

準備

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

まずは、インストールしましょう。

brew install memcached

インストールが成功したら、以下のコマンドで起動してみます。

memcached

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

memcached -p 11211 -m 64m -vv

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

実際のログはこのような感じです。
127.0.0.1:11211で立ってることがわかります。

<17 server listening (auto-negotiate)
<19 send buffer was 9216, now 5592405
<19 server listening (udp)
<20 server listening (udp)
<23 send buffer was 9216, now 5592405
<21 server listening (udp)
<27 new auto-negotiating client connection
<28 new auto-negotiating client connection
27: Client using the ascii protocol
<27 GET / HTTP/1.1 >27 ERROR
<27 Host: 127.0.0.1:11211

ここまでで、memcachedによるインメモリデータベースが立ち上がりました。

次は、実際にkey、value形式でデータの保存を試してみましょう。

さわってみよう

インポート

import memcache

データの保存

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

memcachedclientでクライアントを設定します。
このクライアントに対して”hogehoge”というキーでdataを保存します。

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

データの読み出し

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

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

また、複数のキーを指定して、データを読み出すこともできます。

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

データを削除

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

memcachedclient.flush_all()

ひとまず、インメモリデータベースの簡単な操作の仕方は以上です。

インメモリデータベースをつかった場合の、サーバー構成等についても今後書いていきたいなと思います。

参考

第1回 memcachedの基本
今回から数回にわたり,最近Webアプリケーションのスケーラビリティの分野で話題になっているmemcachedについて,使い方や内部構造,運用について解説させて頂きます。

オススメのプログラミングスクール紹介

【TechAcademy】自宅で学べる!プログラミングスクール

まずは無料体験からでも始められます

★ここがポイント!

 自宅にいながらオンラインで勉強できる
◎ パーソナルメンターがついて指導!

◎ チャットで質問もOK
◎ あなたのオリジナルサービスの開発をサポート!

Pythonプログラミング
スポンサードリンク
あれは魔法だろうか?
タイトルとURLをコピーしました