Redis と php-pecl-redis のインストールメモ(CentOS7.1.1503)

2015年7月22日  カテゴリー:Linux  タグ: , ,
Pocket
LINEで送る

Redis(レディス)は、メモリ上でデータの高速な読み書きを可能にする、キーバリューストアを構築するためのソフトウェアです。キーバリューストアの代表格 Memcached と比べると、Redis は高機能で、データの永続化や、データ構造のサポート、データレプリケーション機能など、便利な機能が色々あります。そこで今回は、Redis と php-pecl-redis のインストール手順と、Redis 推奨のシステム設定方法をメモしておきました。

インストール環境

こちらの手順で構築した、CentOS 7.1.1503 に Redis をインストールしました。

Redis と php-pecl-redis のインストール

Remi の yum リポジトリからインストールします。Redis が依存する jemalloc もインストールするため、EPELリポジトリも追加しておきます。

RemiとEPELリポジトリの追加

・Remi

・EPEL

Redis のインストール

2015年7月22日時点のバージョンは 3.0.3-1 です。

php-pecl-redis のインストール

RemiとEPELリポジトリの無効化

vim /etc/yum.repos.d/remi.repo

vim /etc/yum.repos.d/epel.repo

・自動起動設定
systemctl enable redis

・起動
systemctl start redis

動作確認

▽ コマンドリファレンス - redis 2.0.3 documentation
http://redis.shibu.jp/commandreference/

・php-pecl-redis モジュールの読込み確認

・Apacheの再起動
systemctl restart httpd

Redis 推奨のシステム設定

Redis を起動すると以下のような WARNING が発生します。
tail /var/log/redis/redis.log

それぞれの WARNING の原因です。

  • 1行目 メモリー・オーバーコミットの設定が「1」になっていない
  • 2行目 Transparent Huge Pages (THP) が無効になっていない
  • 3行目 net.core.somaxconn の値が小さすぎる

メモリー・オーバーコミットの設定

デフォルトでは「0」に設定されていますが、これを「1」に変更します。
vim /etc/sysctl.conf
↓下記を追加

・設定を反映
sysctl -p

Transparent Huge Pages (THP) の無効化

vim /etc/rc.local
↓下記を追加

・実行権限を追加
chmod +x /etc/rc.d/rc.local

上記の設定だけだと、OS起動時に rc.local が実行されTHPが無効になる前に Redis が起動してしまうため、THPのWARNINGが解消されません。そこで、Redis の起動スクリプトを修正して、rc.local が実行されてから、Redis が起動するようにします。

vim /usr/lib/systemd/system/redis.service
↓下記を変更

▽ 参考サイト
Redis latency problems troubleshooting – Redis

somaxconn の設定

vim /etc/sysctl.conf
↓下記を追加

・設定を反映
sysctl -p

設定の確認

一度OSを再起動します。
shutdown -r now

Redisログに、WARNINGが発生していなければOKです。余談ですが、おかしなログ→「`-.__.-'」があるなと思っていたら、Redisのロゴの一部でした(^^)

tail -n 21 /var/log/redis/redis.log

Redis のデータ永続関連の設定

vim /etc/redis.conf
143行目付近

デフォルトの設定では、以下の条件でメモリ上のデータベースが、ダンプファイル「/var/lib/redis/dump.rdb」に保存されます。

もし最低1回、キーの変更が発生すると、900秒(15分)後
もし最低10回、キーの変更が発生すると、300秒(5分)後
もし最低10,000回、キーの変更が発生すると、60秒後

一般的なキャッシュ用途であれば、デフォルトの設定で十分かと思いますが、Redis を RDB 代わりに使うなど、保存するデータの消失が許されない場合は「appendonly」を「yes」に設定します。

appendonly(yes/no)
Redisはデフォルトでは非同期でデータセットをディスクに書き出します。もし、クラッシュした場合に最新のいくつかのデータが失われても良いのであれば、Redisの実行方法として、これがベストな方法です。もしデータが大切で、1データも失いたくないのであれば、 append_only_mode を有効にすべきです。このモードが設定されると、Redisは appendonly.aof に書き込み操作を受け取るたびにすべて記録していきます。このファイルは起動時に全データセットをメモリ内に構築していくときに読み込まれます。
もし使用したければ、非同期のダンプと、追記専用モードの両方を併用することもできます。もしダンプを止めたければ、 save 文をコメントアウトする必要があります。その場合でも、もし追記専用モードが有効になっているのであれば、Redisは起動時に、ログファイルからデータをロードしようとして、 dump.rdb ファイルを無視します

設定ファイル - mdash; redis 2.0.3 documentation より引用

php-pecl-redis を使った PHP サンプルコード

単純な Key-Value で使うのであれば、使い方は php-pecl-memcache と同じです。インスタンス生成と接続の部分を書き換えれば差し替えができそうですね。

終わりに

Redis のデータ構造の仕組みを使うと、メンバをスコア順に自動でソートしてくれるなど、面白そうな機能が色々ありそうです。機会を見つけてぜひ試してみたいと思います。

スポンサーリンク
Pocket
LINEで送る

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です