こんにちは。よっしーです(^^)
今日は、dockerで構築した開発環境において、Memcachedを導入した手順をご紹介します。
実行環境
この記事では、下記の記事で構築している開発環境を前提にしています。もし環境構築等のハンズオンに興味がありましたら、下記の記事を参考に環境構築をお願いします。
ただ、修正内容が積み重なっているので、下記のタグをローカルに持ってきて、参照するといいと思います。この記事では、このタグに対しての修正内容を解説しています。
背景
Memcachedを導入して、MySQLのデータをキャッシュしたいと思います。この記事では、Memcachedの導入して動作確認までを解説しています。MySQLのデータキャッシュは次の記事で解説したいと思います。
ディレクトリ構造
ディレクトリ構造は下記のようになっています。赤字の箇所が新規&更新、削除になります。
.
├── LICENSE
├── Makefile
├── README.md
└── app
├── apache-exporter
├── compose.yml
├── flyway
├── grafana
├── influxdb
├── k6
├── memcached
│ └── Dockerfile
├── mongo
├── mysql
├── mysqld-exporter
├── prometheus
├── schemaspy
├── web
│ ├── Dockerfile
│ └── CodeIgniter-3.1.13
│ └── application
│ ├── config
│ │ └── memcached.php
│ └── controllers
│ └── Cache.php
└── xhgui
compose.yml
下記の赤字内容をファイル(compose.yml) 69 – 76 行目に追記します。
memcached:
build: ./memcached
container_name: memcached
ports:
- "11211:11211"
networks:
- net
memcached/Dockerfile
下記の内容で新規ファイル(memcached/Dockerfile) を作成します。
FROM memcached:1.6.19
web/Dockerfile
下記の赤字内容でファイル(web/Dockerfile) 25行目を更新します。
RUN yum install -y 'http://rpms.famillecollet.com/enterprise/remi-release-7.rpm'
RUN yum install -y php74
RUN yum install -y php74-php
RUN yum install -y php74-php-fpm
RUN yum install -y php74-php-pear
RUN yum install -y php74-php-devel
RUN yum install -y php74-php-mbstring
RUN yum install -y php74-php-mysqli
RUN yum install -y php74-php-memcached
web/CodeIgniter-3.1.13/application/config/memcached.php
下記の赤字内容でファイル(web/CodeIgniter-3.1.13/application/config/memcached.php) 15行目を更新します。
$config = array(
'default' => array(
'hostname' => 'memcached',
'port' => '11211',
'weight' => '1',
),
);
web/CodeIgniter-3.1.13/application/controllers/Cache.php
下記の内容で新規ファイル(web/CodeIgniter-3.1.13/application/controllers/Cache.php) を作成します。
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Cache extends CI_Controller {
public function memcached()
{
$this->load->driver('cache');
$cacheKey = 'cache_key';
$cacheData = 'data_to_be_cached';
$cacheTTL = 3600;
$ret = $this->cache->memcached->save($cacheKey, $cacheData, $cacheTTL);
echo sprintf('save is %s <br />', $ret ? 'success' : 'fail');
$data = $this->cache->memcached->get($cacheKey);
echo sprintf('data is [%s] <br />', $data);
$ret = $this->cache->memcached->delete($cacheKey);
echo sprintf('delete is %s <br />', $ret ? 'success' : 'fail');
$data = $this->cache->memcached->get($cacheKey);
echo sprintf('data is [%s] <br />', $data);
}
}
動作確認
下記のコマンドを実行して、サービスを起動します。
make setup
ブラウザで「http://localhost:8080/Cache/memcached」にアクセスして、下記のように表示されていれば成功です。
save is success
data is [data_to_be_cached]
delete is success
data is []
解説
Memcachedの操作について
Docker Composeを使用して起動したMemcachedコンテナを操作するには、以下の手順に従ってください。
Memcachedコンテナに接続するために、telnetコマンドを使用します。telnetコマンドがインストールされていない場合は、事前にインストールしてください。
$ telnet localhost 11211
接続後、以下のコマンドを使用して、Memcachedの操作を行うことができます。
set [key] [flags] [exptime] [bytes]
[value]
get [key]
たとえば、次のようにして、”hello”というキーに対応する値を設定することができます。
set hello 0 60 5
world
上記のコマンドで、[flags]には0を、[exptime]には60を指定し、[bytes]には”value”の文字数である5を指定しています。そして、”world”という文字列を[value]に指定しています。
値を設定した後、以下のコマンドを使用して、”hello”キーに対応する値を取得することができます。
get hello
上記のコマンドで、”world”という値が返されます。
以上が、Docker Composeを使用して起動したMemcachedコンテナを操作するための手順です。
おわりに
今日は、dockerで構築した開発環境にmemcachedを導入しました。次回は、MySQLのデータをキャッシュしたいと思います。
今回使用したファイルは下記のGitHubにタグ付けしています。
もし、質問等あればコメントください。確認後、ご連絡いたします。随時、エンジニア案件も相談可能ですので、よろしくお願いいたします。
また明日お会いしましょう!
コメント