こんにちは。よっしーです(^^)
今日は、dockerで構築した開発環境において、Redisを導入した手順をご紹介します。
実行環境
この記事は、特定の開発環境を前提として書かれています。もし興味がある場合は、その開発環境を構築するための説明が書かれている記事を参考にしてください。該当記事は下記になります。
ただ、この記事で紹介している修正内容がたくさんあるので、その修正を反映した最新版のプログラムをダウンロードして、参照することをおすすめします。該当のプログラムの詳細については、下記のページで確認できます。
背景
Redisは、高速で効率的なキーバリューストアデータベースとして知られています。キーバリューストアデータベースは、キーと値のペアを保存することができ、キーを使用して値を取得することができます。Redisは、そのようなデータベースの1つであり、以下のような背景で使用されることがあります。
- キャッシング:Redisは非常に高速であるため、データのキャッシングに使用することができます。例えば、Webサイトにアクセスするたびに、データベースからデータを取得する代わりに、Redisにデータをキャッシュすることができます。これにより、Webサイトのパフォーマンスが向上し、データベースの負荷が軽減されます。
- セッションストア:Redisは、セッションデータを格納するために使用されることがあります。例えば、Webアプリケーションにおいて、ユーザーがログインするときに、ユーザーのセッションIDをRedisに格納することができます。これにより、ユーザーがアプリケーション内で移動するときに、必要な情報を取得することができます。
- キュー:Redisは、キューを実装するために使用されることがあります。例えば、バックグラウンドジョブを処理するときに、Redisにジョブをキューに格納することができます。これにより、ジョブを実行するためのワーカーが利用可能になったときに、キューからジョブを取り出すことができます。
- リアルタイムチャット:Redisは、リアルタイムチャットアプリケーションで使用されることがあります。例えば、ユーザーがチャットメッセージを送信すると、Redisにメッセージが格納されます。これにより、他のユーザーがチャットメッセージを受信するときに、必要な情報をすばやく取得することができます。
これらは、Redisが使用される一般的な背景の一部です。しかし、Redisは非常に柔軟なデータストアであり、多くの用途に使用されています。
ディレクトリ構造
ディレクトリ構造は下記のようになっています。赤字の箇所が新規&更新、削除になります。
.
├── LICENSE
├── Makefile
├── README.md
└── app
├── apache-exporter
├── compose.yml
├── flyway
├── grafana
├── influxdb
├── k6
├── memcached
├── memcached-exporter
├── mongo
├── mysql
├── mysqld-exporter
├── nginx
├── nginx-exporter
├── php-fpm
│ ├── Dockerfile
│ └── CodeIgniter-3.1.13
│ └── application
│ ├── config
│ │ └── redis.php
│ └── controllers
│ └── Cache.php
├── php-fpm-exporter
├── prometheus
├── redis
│ └── Dockerfile
├── schemaspy
├── web
└── xhgui
compose.yml
下記の赤字内容をファイル(compose.yml) 100 – 107 行目に追記します。
redis:
build: ./redis
container_name: redis
ports:
- "6379:6379"
networks:
- net
redis/Dockerfile
下記の内容で新規ファイル(redis/Dockerfile) を作成します。
FROM redis:7.0.11-alpine
php-fpm/Dockerfile
下記の内容でファイル(web/Dockerfile) 43-45行目に追記します。
RUN pecl install redis \
&& docker-php-ext-enable redis
web/CodeIgniter-3.1.13/application/config/redis.php
下記の内容で新規ファイル(web/CodeIgniter-3.1.13/application/config/redis.php) を作成します。
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
/*
| -------------------------------------------------------------------------
| Redis settings
| -------------------------------------------------------------------------
| Your Redis servers can be specified below.
|
| See: https://codeigniter.com/userguide3/libraries/caching.html#redis-caching
|
*/
$config = array(
'socket_type' => 'tcp',
'host' => 'redis',
'password' => NULL,
'port' => 6379,
'timeout' => 0
);
web/CodeIgniter-3.1.13/application/controllers/Cache.php
下記の内容でファイル(web/CodeIgniter-3.1.13/application/controllers/Cache.php) 6-27行目を追記します。
public function redis()
{
$this->load->driver('cache');
$cacheKey = 'cache_key';
$cacheData = 'data_to_be_cached';
$cacheTTL = 3600;
$ret = $this->cache->redis->save($cacheKey, $cacheData, $cacheTTL);
echo sprintf('save is %s <br />', $ret ? 'success' : 'fail');
$data = $this->cache->redis->get($cacheKey);
echo sprintf('data is [%s] <br />', $data);
$ret = $this->cache->redis->delete($cacheKey);
echo sprintf('delete is %s <br />', $ret ? 'success' : 'fail');
$data = $this->cache->redis->get($cacheKey);
echo sprintf('data is [%s] <br />', $data);
}
動作確認
下記のコマンドを実行して、サービスを起動します。
make setup
ブラウザで「http://localhost:8080/Cache/redis」にアクセスして、下記のように表示されていれば成功です。
save is success
data is [data_to_be_cached]
delete is success
data is []
解説
Redisの操作について
Dockerで起動したRedisは下記の手順で接続し、操作できます。
% docker compose exec -it redis sh
/data # redis-cli
127.0.0.1:6379> get cache_key
"data_to_be_cached"
127.0.0.1:6379> del cache_key
(integer) 1
以下、基本的なRedisの操作方法です。
- Redisに接続する
redis-cli
- キーをセットする
set key value
- キーから値を取得する
get key
- キーを削除する
del key
- ハッシュにフィールドをセットする
hset hash_key field value
- ハッシュからフィールドの値を取得する
hget hash_key field
- リストに値を追加する
lpush list_key value
- リストから値を取得する
lpop list_key
- キーの有効期限を設定する
expire key seconds
- キーの残りの有効期限を取得する
ttl key
これらは、Redisを使用するための基本的なコマンドの一部です。Redisには、これらの他にも多くのコマンドがあり、より高度な操作を行うことができます。また、Redisは多くのプログラミング言語に対してクライアントライブラリが提供されており、これを使用してRedisを操作することもできます。
おわりに
今日は、dockerで構築した開発環境にRedisを導入しました。次回は、exporterを導入したいと思います。
今回使用したファイルは下記のGitHubにタグ付けしています。
もし、質問等あればコメントください。確認後、ご連絡いたします。随時、エンジニア案件も相談可能ですので、よろしくお願いいたします。
また明日お会いしましょう!
コメント