php-memcached 2.2.0 と 3.1.4 でデータの互換性があるのか確認する

pecl/memcached は、libmemcachedライブラリを介してmemcachedインターフェイスするためのPHP拡張です。

https://pecl.php.net/package/memcached

PHP5系で最新版(3.1.4) をインストールしようと思ったところ、7.0.0からしかインストールができないとのエラーが発生。memcached-2.2.0であればインストール可能

root@3105494f7cac:/var/www/html# pecl install memcached
pecl/memcached requires PHP (version >= 7.0.0), installed version is 5.6.40
pecl/memcached can optionally use PHP extension "igbinary" (version >= 2.0)
pecl/memcached can optionally use PHP extension "msgpack" (version >= 2.0)
No valid packages found
install failed

逆に、memcached-2.2.0 はPHP7系ではインストールできませんでした。

pecl/memcached requires PHP (version >= 5.2.0, version <= 6.0.0, excluded versions: 6.0.0), installed version is 7.3.10
No valid packages found
install failed

READMEにもバッチリ書いてありました。

github.com

互換性があるか検証してみる

PHP5からPHP7へバージョンアップする際に、ログインセッション引き継ぎながら動的に切り替えしたいので、memcached2,3間でデータの互換性があるかどうか簡単に検証していきます。

検証環境

docker環境を使って、PHP5.6(memcached-2.2.0), PHP7.3(memcached-3.1.4)を用意しました。

github.com

なお、igbinary, msgpack は入れていません。

php -i | grep igbinary
igbinary support => no
php -i | grep msgpack
msgpack support => no

libmemcached は、1.0.18 最新、 実行時設定(php.ini)はデフォルトにしています。

この環境に、 画面にアクセスしたら値をカウントアップ => Memcachedに保管 => 画面に表示するという簡単なwebアプリを乗せ、PHP5.6とPHP7.3で互いに、カウント数の書き込み・読み込みができれば、互換性があると判断します。

https://github.com/takapi86/verify-memcached-for-php-migration/blob/b3e80555a04784c69aacb03759c8a60850d15a74/app/index.php

セッションを使うケースと、Memcached直接を使うケースで試してみます。

結果

無事問題なく、相互に読み書きができることを確認できました。

簡単な確認でしたが、ここまで

参考

https://pecl.php.net/package-changelog.php?package=memcached&release=3.1.4 https://github.com/php-memcached-dev/php-memcached#dependencies https://launchpad.net/libmemcached/+download