概要
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 memcached
PHPライブラリ
PHPライブラリも同様にyumでインストールできる。
サーバのPHPバージョンに合わせること。
今回は動作確認のためにmemcacheとmemcachedの両方をインストールするが、実際に使う際はどちらか一つで問題ない。
yum install -y php72-php-pecl-memcache
yum install -y php72-php-pecl-memcached
あとは他のextensionと同様にphp.iniに追加する。
extension=memcache.so
extension=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が勝っているようにみえる。
ライブラリ名 | 書き込み | 読み込み |
---|---|---|
Memcache | 0m23.270s | 0m21.703s |
Memcached | 0m19.938s | 0m19.213s |
参考資料
PHPのMemcachedモジュールをインストール
http://takashi-kun.hatenablog.com/entry/2013/11/23/031343