NoSQL界隈ではRedisやCassandra、Couchbassが流行りと見受けられる。だが、今回は業務で利用している、memcachedについて改めて学習したことをまとめていく。
memcachedとは?memcachedとは分散型キャッシュシステムを構築することができるソフトウェアである。kvsの方式でデータを保存することができ、メモリ上にデータを保存するNoSQL。
kvsとは?データの保存・管理手法の一つ。任意の値(value)に対して対応する標識(key)を設定して保存する方法。特徴メモリ上にデータを保存しているため、データの書き込み・読み込みが早い。RDBと組み合わせる事で、RDBの読み込みの負担を軽減できる。クライアントライブラリで分散処理を実装できる。メモリ上にデータを保存しているため、memcachedの再起動を行うとデータがリセットされる。設定した容量を超えると利用されないキャッシュから順番に消える(LRU)。LRUとは?未使用の時間が最も低いものを判定するアルゴリズム分散処理についてmemcachedはクライアントライブラリで分散処理を実装することが出来る。PHPのライブラリ(Memcache)では、分散処理はキーごとにサーバを使い分けることで実現している。呼び出しも同様のアルゴリズムとなっているので、保存したmemcachedを参照する。
PHPのクライアントライブラリMemcache特徴PHP4.3.3以上で使用可能インストール時に他のライブラリに依存しないMemcached特徴PHP5.2.0以上で使用可能インストール時にlibmemcachedモジュールが必要memcacheより利用できるメソッドが多いらしい導入memcached導入方法はソースでのインストールやyumでのインストールがある。
今回はyumでのインストールを行う。
yum install -y memcachedPHPライブラリPHPライブラリも同様にyumでインストールできる。サーバのPHPバージョンに合わせること。今回は動作確認のためにmemcacheとmemcachedの両方をインストールするが、実際に使う際はどちらか一つで問題ない。
yum install -y php72-php-pecl-memcacheyum install -y php72-php-pecl-memcachedあとは他のextensionと同様にphp.iniに追加する。
extension=memcache.soextension=memcached.soこれで動くはずだったが、下記のWarningが発生した。
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/memcached.so' - /usr/lib64/php/modules/memcached.so: undefined symbol: memcached_touch in Unknown on line 0こちらを参考に対応し、正常に動作するようになった。
速度比較PHPライブラリの読み込みと書き込みの速度を比較してみる。実行結果を見ると僅かな差で Memcachedが勝っているようにみえる。
ライブラリ名書き込み読み込みMemcache0m23.270s0m21.703sMemcached0m19.938s0m19.213sソースコードはこちら
参考資料PHPのMemcachedモジュールをインストールhttp://takashi-kun.hatenablog.com/entry/2013/11/23/031343