Dockerで作る開発環境:Memcachedの導入

スポンサーリンク
Dockerで作る開発環境:Memcahcedの導入 ノウハウ
Dockerで作る開発環境:Memcahcedの導入
この記事は約7分で読めます。
よっしー
よっしー

こんにちは。よっしーです(^^)

今日は、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にタグ付けしています。

もし、質問等あればコメントください。確認後、ご連絡いたします。随時、エンジニア案件も相談可能ですので、よろしくお願いいたします。

よっしー
よっしー

また明日お会いしましょう!

コメント

タイトルとURLをコピーしました