この記事では、すでにdocker compose で運用しているwordpress やmysql に加えて、redis を組み込む作業を説明します。
このdocker compse コンフィグを入れるだけで一応動きます
version: '3.8'
services:
# MySQL サービス
mysql:
image: mysql:latest
restart: always
volumes:
- ./mysql/data:/var/lib/mysql
- ./mysql/conf/custom.cnf:/etc/mysql/conf.d/custom.cnf
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE:-wordpress}
MYSQL_USER: ${MYSQL_USER:-root}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
ports:
- "3306:3306" # ホストの3306ポートをコンテナの3306ポートに公開
networks:
- default
# WordPress サービス
wordpress:
image: wordpress:latest
restart: always
volumes:
- ./themes:/var/www/html/wp-content/themes
- ./plugins:/var/www/html/wp-content/plugins
- ./uploads:/var/www/html/wp-content/uploads
depends_on:
- mysql
- redis # Redis に依存関係を追加
ports:
- "3001:80"
environment:
WORDPRESS_DB_HOST: mysql
WORDPRESS_DB_NAME: ${MYSQL_DATABASE:-wordpress}
WORDPRESS_DB_USER: ${MYSQL_USER:-root}
WORDPRESS_DB_PASSWORD: ${MYSQL_PASSWORD}
WORDPRESS_CONFIG_EXTRA: |
define('WP_REDIS_HOST', 'redis');
define('WP_REDIS_PORT', 6379);
define('WP_CACHE_KEY_SALT', 'your-domain-name');
define('WP_CACHE', true); # キャッシュを有効化
networks:
- default
# Redis サービス(追加)
redis:
image: redis:latest
container_name: redis
restart: always
ports:
- "6379:6379" # ホストの6379ポートをコンテナの6379ポートに公開
volumes:
- redis-data:/data # 永続化用ボリューム(オプション)
networks:
- default
# Prometheus サービス
prometheus:
image: prom/prometheus:latest
restart: always
volumes:
- ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus-data:/prometheus # 永続化用ボリューム
ports:
- "9090:9090"
networks:
- default
# Grafana サービス
grafana:
image: grafana/grafana:latest
restart: always
volumes:
- grafana-data:/var/lib/grafana # 永続化用ボリューム
ports:
- "3000:3000"
environment:
- GF_SECURITY_ADMIN_PASSWORD=admin # Grafana管理者パスワード(必要に応じて変更してください)
networks:
- default
# Node Exporter サービス
node-exporter:
image: prom/node-exporter:latest
restart: always
ports:
- "9100:9100"
networks:
- default
# MySQL Exporter サービス
mysql-exporter:
image: prom/mysqld-exporter:latest
restart: always
environment:
DATA_SOURCE_NAME: "${MYSQL_USER}:${MYSQL_PASSWORD}@tcp(mysql:3306)/${MYSQL_DATABASE}"
networks:
- default
networks:
default:
driver: bridge
volumes:
prometheus-data: # Prometheus の永続化ボリューム
grafana-data: # Grafana の永続化ボリューム
redis-data: # Redis の永続化ボリューム(オプション)
結局何を変更したのかというと
変更点の説明
- Redisサービスの追加:
redis
サービスを追加し、最新のRedisイメージを使用。- ポート
6379
を公開し、WordPressと接続できるように設定。 - 永続化用ボリューム
redis-data
を指定(オプション)。
- WordPressでRedisを有効化:
- WordPressの環境変数に以下を追加:php
define('WP_REDIS_HOST', 'redis'); define('WP_REDIS_PORT', 6379); define('WP_CACHE_KEY_SALT', 'your-domain-name'); define('WP_CACHE', true);
- WordPressの環境変数に以下を追加:php
- 依存関係の設定:
depends_on
にredis
を追加し、WordPressがRedis起動後に動作するよう調整。
ということになります
Redis運用方法
1. Docker Composeで起動
以下のコマンドでサービス全体を起動します:
docker-compose up -d
2. Redisが正常に動作しているか確認
Redisコンテナが正常に起動しているか確認します:
docker ps | grep redis
abae26daad8f redis:latest "docker-entrypoint.s…" 15 minutes ago Up 15 minutes 0.0.0.0:6379->6379/tcp, :::6379->6379/tcp
3. WordPressでRedisキャッシュが有効か確認
- WordPress管理画面にログインし、「Plugins」から「Redis Object Cache」プラグインをインストール&有効化します

有効化して プラグインの設定画面で「Enable Object Cache」をクリックしてキャッシュを有効化します

- キャッシュが有効になると、下記のように「Connected」と表示されます。

4. Redisキャッシュのクリア
キャッシュを手動でクリアする場合は以下のコマンドを実行:
docker exec redis redis-cli FLUSHALL
Redisキャッシュの状態やどれくらいのキャッシュがあるかを確認するためには、redis-cli
を使用して以下のコマンドを実行することで情報を取得できます。これらのコマンドは、Redisが正常に動作している場合にキャッシュの統計情報やメモリ使用状況を確認するのに役立ちます。
主要な確認コマンド
1. キャッシュ内のキー数を確認
Redisデータベースに現在保存されているキー数を確認するには、以下のコマンドを使用します:
root@abae26daad8f:/data# redis-cli DBSIZE
(integer) 250
- 出力例:text
(integer) 2
50 この場合、現在のデータベースには250個のキーが保存されています。
2. キャッシュヒット率とミス率を確認
キャッシュ効率(ヒット/ミス率)を確認するには、以下のコマンドを使用します:
root@abae26daad8f:/data# redis-cli INFO stats | grep keyspace_hits
redis-cli INFO stats | grep keyspace_misses
keyspace_hits:4727
keyspace_misses:5337
keyspace_hits
: キャッシュヒット数(キャッシュからデータが取得された回数)。keyspace_misses
: キャッシュミス数(キャッシュに存在せず、データベースから取得された回数)。
これらの値を使ってヒット率を計算できます:
=keyspace hitskeyspace hits+keyspace misses×100 =keyspace hits+keyspace misseskeyspace hits×100
キャッシュヒット率を計算すると、以下の通りです:
=keyspace hitskeyspace hits+keyspace misses×100 =keyspace hits+keyspace misseskeyspace hits×100値を代入すると:
=47274727+5337×100=46.97% =4727+53374727×100=46.97%したがって、キャッシュヒット率は 約46.97% です。
3. メモリ使用量を確認
Redisが使用しているメモリ量やメモリ関連情報を確認するには、以下のコマンドを使用します:
redis-cli INFO memory
# Memory
used_memory:3551024
mem_fragmentation_ratio:3.95
mem_fragmentation_bytes:10368704
maxmemory:0
maxmemory_human:0B
- 各フィールドの意味:
used_memory
: Redisが現在使用しているメモリ量(バイト単位)。used_memory_human
: 人間が読みやすい形式で表示されたメモリ使用量。maxmemory
: Redisに設定されている最大メモリ量。mem_fragmentation_ratio
: メモリ断片化率(1以上の場合、断片化が発生している可能性あり)。
4. キャッシュ内容の詳細を見る
Redisに保存されているキーやその値を確認するには、以下のコマンドを使用します:
すべてのキー一覧
bashredis-cli KEYS '*'
- 出力例:text
key1 key2 key3
特定キーの値を見る
bashredis-cli GET <key_name>
- 出力例:text
"Hello, World!"
5. リアルタイム統計を見る
リアルタイムでRedisインスタンスの統計情報を監視するには、以下のコマンドを使用します:
bashredis-cli --stat
- 出力例:text
——- data —— ——————— load ——————– – child –
keys mem clients blocked requests connections
506 1015.00K 1 0 24 (+0) 7
507 3.40M 51 0 146425 (+85964) …
text- 各列の意味:
- `keys`: 現在保存されているキー数。
- `mem`: 使用中のメモリ量。
- `clients`: 接続中のクライアント数。
---
### **6. メモリ統計情報を見る**
詳細なメモリ統計情報を見るには、以下のコマンドを実行します:
```bash
redis-cli MEMORY STATS
- 主な出力例:text
- “peak.allocated”
- (integer) <ピーク時に割り当てられたメモリ量>
- “total.allocated”
- (integer) <現在割り当てられているメモリ量>
- “dataset.bytes”
- (integer) <データセット全体で使用中のメモリ量>
…
text
---
### **7. Redisキャッシュ全体をクリア**
もしキャッシュ全体をクリアしたい場合は、以下のコマンドで可能です。ただし、この操作は慎重に行ってください。
```bash
redis-cli FLUSHALL
- このコマンドはすべてのデータベース内で保存されているキーと値を削除します。
まとめ
Redisキャッシュがどれくらいあるかやその効率性(ヒット率など)を見るためには、以下が重要です:
- キー数:
DBSIZE
コマンドで確認。 - ヒット/ミス率:
INFO stats
コマンドで確認。 - メモリ使用量:
INFO memory
またはMEMORY STATS
コマンドで確認。 - リアルタイム監視:
--stat
オプションでリアルタイム監視。
これらのコマンドを駆使することで、Redisキャッシュ状況やパフォーマンス状態を正確に把握できます。
メリット
- Redisによるキャッシュ機能でデータベースクエリ回数が減少し、MySQLサーバーへの負荷軽減。
- ページロード速度が向上し、ユーザー体験やSEOパフォーマンスが改善。
- Docker Compose環境で簡単にセットアップ可能。