MagentoのセッションとキャッシュをRedisに保存する
この記事は公開から 1年以上が経過しています。現在の最新情報との整合性については弊社では一切の責任を負いかねます。
Magentoにはディスクに対して頻繁に書き込みを行う処理が大きくわけて2つあります。
1つはセッション。もう1つはキャッシュです。
セッションはアクセス1回毎に更新処理を行うため、アクセスの多いサイトではディスクへの読み込み・書き込み負荷が高くなりがちです。
キャッシュは作成までは負荷が高いですが、その後は逐次書き換えていくので、大幅な更新でない限りは小規模な更新が断続的に続くことになります。
さて、セッションとキャッシュをディスクに対して保存していると、Magentoで構築したサイトをスケールアウトしたくなった場合に足かせになってしまいます。
このエントリではMagentoのキャッシュとセッションをKey-Value-Storage実装のひとつである、Redisに保存する方法を紹介します。
Redisとは
Redisは「Remote Dictionary Server」を縮めて付けられたオープンソースのKey-Value-Storageです。
データベースのように見えますが、ある1つのキーに対して値が1つに定まることから、リレーショナルデータベースのように複雑な問い合わせ処理が不要で、その分高速なレスポンスが得られることが最大の特徴です。
似た実装にはMemcachedなどがありますが、Redisのアピールポイントとしては、格納する値の構造をプログラミング言語側で定義することができるという点にあります。
MagentoとRedis
冒頭にも書きましたが、Magentoはセッションとキャッシュという2つのデータを頻繁に更新します。
また、「MagentoのキャッシュにAPCを使う」 で少し触れたのですが、Magentoのキャッシュにはタグという情報があり、これが適切に扱えないキャッシュの保存先は、運用上に潜在的な問題を抱えることになります。
ですが、Redisをキャッシュの保存先に使う場合は、タグ情報が利用できるため、特定のキャッシュだけを更新するということが可能になっています。
これだけでもRedisをキャッシュの保存先に利用する価値はあります。
Cm_RedisSessionとCm_Cache_Backend_Redis
Colin Mollenhour氏がGitHubで公開している、
という2つのエクステンションがあります。
この2つのエクステンションは、片方だけでも利用できるようになっていて、それぞれセッションとキャッシュをRedisに格納できるようにしてくれます。
Magento Community Edition 1.4以上で利用できますが、PHP5.3以上が必要な点に注意が必要です。
Community Edition 1.8とEnterprise Edition 1.13
Magento Enterprise Editionの最新版である、1.13とCommunity Editionの最新版(現在アルファ版)の1.8では、キャッシュの保存先にRedisが利用できるようになっています。
ただ、セッションは保存できないので、セッションを保存したい場合は上記のエクステンションを利用することになります。
MagentoでRedisを使う
Redisのインストール
公式サイトからダウンロードしてきたソースコードを元にインストールするか、Linuxのディストリビューションなどが提供するパッケージ管理機能を利用して、Redisをインストールしてください。
Redisのインストールそのものについてはこのエントリの本筋ではないので、割愛します。
エクステンションの導入
GitHubから、先ほど紹介したエクステンションのソースコードをダウンロードします。
GitHubのページに書かれている説明をよく読み、所定の位置にソースコードを配置します。
local.xmlの修正
最後に app/etc/local.xml の global ディレクティブ以下に下記の内容を加えます。
セッション用
db 127.0.0.1 6379 2.5 0 2048 gzip 1 6 5 30 7200
キャッシュ用
Cm_Cache_Backend_Redis 127.0.0.1 6379 1 0 1 10 0 1 1 20480 gzip
セッションにRedisを使用する場合は、既存の session_save ディレクティブをコメントにするのを忘れないでください。(削除してもよいですが、あとで戻せなくなるの避けたほうが良いでしょう)
修正が終わったら、Magentoのキャッシュをクリアします。
フロントエンドもバックエンドも表示されていればOKです。
必要に応じて行うこと
稼働中のサイトで設定変更をする場合は、セッション情報の移行が必要になります。
Cm_RedisSessionにはそのためのツールが付属していますので、説明をよく読んで実行します。