ガジェット通信

見たことのないものを見に行こう

ディレクターなら知っておきたいキャッシュサーバ「memcached」の基礎知識

DATE:
  • ガジェット通信を≫

こんにちは。ディレクターのジャックです。
入社してようやく3ヶ月が経ちました。月日が経つというのはあっという間ですね。

最近は、クライアント様との打ち合わせにもよく参加させていただいております。
その際に少なからず話題に上がるのは、技術の話。
たとえば、「システムのセキュリティを担保するためのサーバ構成は?」とか「このキャンペーンサイトの負荷対策ってどうしたら良い?」とかですね。

クライアント様との打ち合わせで技術的な話になった際に、「持ち帰ってエンジニアに確認します!」みたいなことにならないように、必要最低限の技術知識はディレクターにも必要になってきている感じがします。

そこで、今回はWebサイト構築では必要不可欠な負荷対策について簡単にお話したいと思います。
本日お話したいのは、memcached (memory cache daemon) についてです。

memcachedとは?

memcachedとは、データとオブジェクトをメモリ内にキャッシュするサーバで、データベースからのread回数を減少させる際に利用します。
特に、データベースを用いたWebサイトを高速化するためによく用いられます。

導入方法

さて、早速インストールしてみましょう。
今回のインストール環境は「Ubuntu 14.04」です。
Ubuntuのインストール方法や設定については、今回の記事では割愛させていただきます。

memcachedをインストールする

$ sudo apt-get install memcached
Reading package lists… Done
Building dependency tree
Reading state information… Done
Suggested packages:
libcache-memcached-perl libmemcached
The following NEW packages will be installed:
memcached
0 upgraded, 1 newly installed, 0 to remove and 15 not upgraded.
Need to get 66.7 kB of archives.
After this operation, 229 kB of additional disk space will be used.
Get:1 http://archive.ubuntu.com/ubuntu/ utopic/main memcached amd64 1.4.14-0ubuntu9 [66.7 kB]
Fetched 66.7 kB in 6s (10.2 kB/s)
Selecting previously unselected package memcached.
(Reading database … 67907 files and directories currently installed.)
Preparing to unpack …/memcached_1.4.14-0ubuntu9_amd64.deb …
Unpacking memcached (1.4.14-0ubuntu9) …
Processing triggers for man-db (2.7.0.2-2) …
Processing triggers for ureadahead (0.100.0-16) …

起動の確認を行う

serviceコマンドを利用することで、現在起動中のサービスを確認することができます。memcachedが起動されていることを確認しましょう。

$ service –status-all | grep memcached
[ ? ] cryptdisks-early
[ ? ] killprocs
[ + ] memcached
[ ? ] ondemand
[ ? ] open-vm-tools
[ ? ] pppd-dns
[ ? ] rc.local
[ ? ] sendsigs
[ ? ] udev-finish
[ ? ] umountfs
[ ? ] umountnfs.sh
[ ? ] umountroot
[ ? ] virtualbox-guest-x11

設定ファイルを確認・編集してみる

続いて、設定ファイルを確認・変更してみましょう。
デフォルトの設定を利用するだけなら、特に編集作業を行う必要はありません。

$ sudo vi /etc/memcached.conf

実際の設定ファイルは下記となります。

# memcached default config file
# 2003 – Jay Bonci <jaybonci@debian.org>
# This configuration file is read by the start-memcached script provided as
# part of the Debian GNU/Linux distribution.

# Run memcached as a daemon. This command is implied, and is not needed for the
# daemon to run. See the README.Debian that comes with this package for more
# information.
-d

# Log memcached’s output to /var/log/memcached
logfile /var/log/memcached.log

# Be verbose
# -v

# Be even more verbose (print client commands as well)
# -vv

# Start with a cap of 64 megs of memory. It’s reasonable, and the daemon default
# Note that the daemon will grow to this size, but does not start out holding this much
# memory
-m 64

# Default connection port is 11211
-p 11211

# Run the daemon as root. The start-memcached will default to running as root if no
# -u command is present in this config file
-u memcache

# Specify which IP address to listen on. The default is to listen on all IP addresses
# This parameter is one of the only security measures that memcached has, so make sure
# it’s listening on a firewalled interface.
-l 127.0.0.1

# Limit the number of simultaneous incoming connections. The daemon default is 1024
# -c 1024

# Lock down all paged memory. Consult with the README and homepage before you do this
# -k

# Return error when memory is exhausted (rather than removing items)
# -M

# Maximize core file limit
# -r

memcached の再起動を行う

設定ファイルの変更をしたら、memcachedの再起動を行って下さい。

$ sudo service memcached restart

実際に使ってみる

さあ、準備が整いましたね。実際に利用してみましょう。
telnetからmemcachedに接続し、データのread/write処理をします。

memcachedに接続する

下記コマンドを入力して接続してみます。接続後、statsコマンドを入力すると接続ステータス情報が表示されます。

$ telnet 127.0.0.1 11211
Trying 127.0.0.1…
Connected to 127.0.0.1.
Escape character is ‘^]’.
stats
STAT pid 11852
STAT uptime 582
STAT time 1435156147
STAT version 1.4.14 (Ubuntu)
STAT libevent 2.0.21-stable
STAT pointer_size 64
STAT rusage_user 0.017610
STAT rusage_system 0.017610
STAT curr_connections 5
STAT total_connections 8
STAT connection_structures 6
STAT reserved_fds 20
STAT cmd_get 1
STAT cmd_set 1
STAT cmd_flush 0
STAT cmd_touch 0
STAT get_hits 1
STAT get_misses 0
STAT delete_misses 0
STAT delete_hits 0
STAT incr_misses 0
STAT incr_hits 0
STAT decr_misses 0
STAT decr_hits 0
STAT cas_misses 0
STAT cas_hits 0
STAT cas_badval 0
STAT touch_hits 0
STAT touch_misses 0
STAT auth_cmds 0
STAT auth_errors 0
STAT bytes_read 119
STAT bytes_written 110
STAT limit_maxbytes 67108864
STAT accepting_conns 1
STAT listen_disabled_num 0
STAT threads 4
STAT conn_yields 0
STAT hash_power_level 16
STAT hash_bytes 524288
STAT hash_is_expanding 0
STAT expired_unfetched 0
STAT evicted_unfetched 0
STAT bytes 71
STAT curr_items 1
STAT total_items 1
STAT evictions 0
STAT reclaimed 0
END

接続成功ですね。おめでとうございます!

データを保存する

memcachedにデータを保存する際は、setコマンドを利用します。
setコマンドのフォーマットは下記となります。

set [キー] [データ圧縮フラグ] [キャッシュの有効期限] [サイズ] <改行>
[格納する値]

例えば、「lig」というキーに対して「jack」という「4バイト」の文字列を「非圧縮」で「600秒間(10分間)」保存する際は、下記コマンドを実行します。

set lig 0 600 4
jack
STORED

パラメータの対応表は下記となります。

説明

キー
格納するデータのキー

データ圧縮フラグ
データの圧縮指定フラグ(1:zip圧縮/0:非圧縮)

キャッシュの有効期限
UNIXタイムスタンプ形式か現在からの秒数を指定

サイズ
格納するデータ長をバイト単位で指定

データを取り出す

memcachedへのデータ保存に成功したので、次はデータを取り出す作業です。
データを取り出す際には、getコマンドを利用します。
getコマンドのフォーマットは下記となります。

set [キー]

先ほど保存した、「lig」というキーの値を取得してみましょう。

get lig
VALUE lig 0 4
jack
END

「jack」という文字列が返却されましたね。成功です。

終わりに

いかがでしたか?
今回はmemcachedの簡単な使い方をご紹介させていただきました。
次回は、LAMP環境下での利用方法をご紹介できればと思います。

カテゴリー : 生活・趣味 タグ :
LIGの記事一覧をみる ▶
  • 誤字を発見した方はこちらからご連絡ください。
  • ガジェット通信編集部への情報提供はこちらから
  • 記事内の筆者見解は明示のない限りガジェット通信を代表するものではありません。

TOP