CakePHP3からMemcachedを利用する

環境

  • CentOS7
  • PHP5.6
  • CakePHP3
  • Memcached

前提条件

PHP5.6の拡張モジュールを、Remiリポジトリから
yumインストールできる状態を前提としています。

PHP5.6以外のバージョンでは試していませんが、
もしかしたら、必須モジュールが変わっているかもしれません :'(

また、Memcachedがインストールされていて、
利用できる状態である必要があります。

PHP拡張モジュールのインストール

MemcachedをPHPから利用するために必要な、
下記の拡張モジュールをインストールしていきます。

  • msgpack
  • igbinary
  • memcached

下記コマンドで簡単にインストール可能です 🙂

拡張モジュールのシンボリックリンク作成

yumインストールしたら、
拡張モジュールのシンボリックリンクを作成しましょう。

拡張モジュールの読み込み設定

必要な拡張モジュールをインストールしたら、
モジュールを読み込むように設定します。

php.iniに直接書いてしまってもいいですし、
拡張モジュールを格納するディレクトリにiniファイルを
入れてしまっても良いでしょう。

僕の環境では、拡張モジュールは/etc/php.d/で読み込み設定を
行っているようでしたので、その方法に従いました。

CakePHPの設定

CakePHP3からMemcachedを使うためには、
config/app.phpに設定を記述する必要があります。

prefixはおそらく自由に設定して大丈夫でしょう。
キャッシュの保存期間は2分程度に設定してあります。

Webサーバの再起動

apacheやNginxなど、インストールされている
Webサーバを再起動してください。
PHPからMemcachedを利用できるようになっているはずです。

Memcachedを有効化するまでのエラー

undefined symbol:php_json_decode_ex

memcachedのみをインストールした際に発生しました。
拡張モジュール(extension)のロード順を、
memcachedがigbinaryとmsgpackより後に読み込まれるよう変更して解決しました。

undefined symbol: igbinary_serialize

拡張モジュールigbinaryをインストール・ロードすることで解決しました。

undefined symbol: php_msgpack_serializ

拡張モジュールmsgpackをインストール・ロードすることで解決しました。

1 is not a valid serializer engine for Memcached

CakePHPの初期化処理(_setOptions)でエラーが発生している状態です。
config/app.phpのCache設定を修正したところ解決しました。

_cake_core_にserializerという余計なプロパティが設定されていたので、
削除したところ無事動きました。