1. Home
  2. Database
  3. Redis
  4. 【Redis入門編】CentOSにRedis(NoSQL)をインストールして初期設定&デーモン化までを行う

【Redis入門編】CentOSにRedis(NoSQL)をインストールして初期設定&デーモン化までを行う

  • 公開日
  • 更新日
  • カテゴリ:Redis
  • タグ:CentOS,Redis,NoSQL,AmazonElastiCache
【Redis入門編】CentOSにRedis(NoSQL)をインストールして初期設定&デーモン化までを行う

今回は、NoSQL の中でも人気の高い Redis をインストールします。

Contents

  1. Redis
    1. Redis のデータ型
    2. AWS で Redis を使う
  2. 検証環境
  3. インストール
  4. ユーザ作成
  5. 設定ファイルの編集とログファイルの作成
  6. バックグラウンドで起動
  7. 動作確認

Redis

Redis(=REmote DIctionary Server) とは、NoSQL(=Not only SQL) に分類されるキー・バリュー型のインメモリデータベースです。メモリ上のみで動作するので非常に高速であり、永続化(スナップショット/AOF (=append-only file) )が可能です。

処理自体はシングルスレッドですが、リスト・マップ・ソート済みセット・ハッシュテーブルといったリッチなデータ構造を持てることも特徴であり、レプリケーションやクラスタリングにも対応している非常に高機能な NoSQL です。

使用用途としてはキャッシュ・セッション管理からリアルタイムデータのストア、各種分析まで幅広く使われており、RDBMS にはない特徴がいかんなく発揮されています。

やはり超高速というのは強いです。 MySQL などの RDBMS みたいに複雑な事は出来ませんが、使用用途さえ見極められれば最強クラスの友達になります。(色々と大規模なほど高速という要素やキャッシュに助けられている今日このごろ)

Redis は BSD ライセンスとして提供されており、Github でソースコードが公開されています。
[Github]antirez/redis
https://github.com/antirez/redis

[公式]Redis
https://redis.io/

Redis のデータ型

Redis のデータ型は以下の5つです。

文字列(String)型

基本型です。 Key-Value の形でストアされます。

"key1" => "value1"
"key2" => "value2"
"key3" => "value3"

バイナリセーフで、value 値も最大1 GB まで格納できます。

リスト(List)型

値は順番に格納され、登録順でデータが管理されます。そのため、Key の重複が認められます。

"key1" => "value1"
"key1" => "value2"
"key2" => "value3"
"key1" => "value4"
"key3" => "value5"
"key2" => "value6"

セット(Set)型

基本的な格納型はリスト型と同じです。ただしこっちは登録順番は管理されません。その代わり、Key 同志の処理(集合の和・差・積)が行えます。

"key_01" => "AAA",
"key_01" => "BBB",
"key_02" => "AAA",
"key_01" => "CCC",
"key_03" => "DDD",
"key_02" => "EEE",

// key_01 と 02 の和
 => array("AAA", "BBB", "CCC", "EEE");

// key_01 と 02 の差
=> array("BBB", "CCC", "EEE");

// key_01 と 02 の積
=> array("AAA");

ソート済みセット(SortedSet)型

「Key 」「Value 」ともう一つ「Score 」をセットする事で、セットされたスコアに基づいてソートされデータがストアされていきます。

// 初期データ
"key_01", 100, "AAA"
"key_01", 200, "BBB"
"key_01", 300, "AAA"
"key_01", 400, "CCC"
"key_01", 500, "DDD"
"key_01", 600, "EEE"


// 以下のデータを挿入
 => "key_01", 350, "FFF"

// 結果
"key_01", 100, "AAA"
"key_01", 200, "BBB"
"key_01", 300, "AAA"
"key_01", 350, "FFF" // ← ココ
"key_01", 400, "CCC"
"key_01", 500, "DDD"
"key_01", 600, "EEE"

// スコアを基にデータが並び変えられる

ハッシュ(Hash)型

Key(親) Key(子) Value の形でストアされるデータ型です。

"key_01", "aa", "AAA"
"key_01", "bb", "BBB"
"key_02", "aa", "AAA"
"key_01", "cc", "CCC"
"key_02", "dd", "DDD"
"key_03", "ee", "EEE"

// key_01 を取得
 => array(
"aa" => "AAA",
  "bb" => "BBB",
  "cc" => "CCC",
);

要するに連想配列のような形です。

AWS で Redis を使う

AWS では、ElastiCache というサービスで Redis を使う事ができます。 Redis と Memcached を選択できます。

Amazon ElastiCache
https://aws.amazon.com/jp/redis/
https://aws.amazon.com/jp/elasticache/what-is-redis/

検証環境

  • Linux CentOS 7.2

yum のアップデートと vim のインストールは行いましたが、基本的には空っぽの状態です。

インストール

それではここから実際にインストールを行っていきます。今回は、最新版をインストールします。

まずは公式から最新版をチェックします。
http://download.redis.io/releases/

2018 年 2 月時点で最新版は Redis 4.0.8 だったのでこれをインストールします。

Redis のソースをダウンロードします。

# Redis のソースをダウンロードする
wget http://download.redis.io/releases/redis-4.0.8.tar.gz

# 実行結果
[root@localhost ~]# wget http://download.redis.io/releases/redis-4.0.8.tar.gz
--2018-02-08 22:44:58--  http://download.redis.io/releases/redis-4.0.8.tar.gz
Resolving download.redis.io (download.redis.io)... 109.74.203.151
Connecting to download.redis.io (download.redis.io)|109.74.203.151|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1729973 (1.6M) [application/x-gzip]
Saving to: ‘ redis-4.0.8.tar.gz.1 ’

100%[========================================>] 1,729,973    655KB/s   in 2.6s   

2018-02-08 22:45:02 (655 KB/s) - ‘ redis-4.0.8.tar.gz.1 ’ saved [1729973/1729973]

ダウンロードしたソースを解凍します。

# ダウンロードしたソースを解凍する
tar xzf redis-4.0.8.tar.gz

# 実行結果
[root@localhost ~]# tar xzf redis-4.0.8.tar.gz
[root@localhost ~]# ll
total 3392
drwxrwxr-x. 6 root root    4096 Feb  3 01:39 redis-4.0.8 // ← 解凍後
-rw-r--r--. 1 root root 1729973 Feb  3 01:40 redis-4.0.8.tar.gz // ← ダウンロードしたソース

解凍したディレクトリへ移動します。

# 解凍したディレクトリへ移動する
cd redis-4.0.8/

make コマンドでコンパイルします。

# make コマンドでコンパイルする
make

# 実行結果
[root@localhost redis-4.0.8]# make
cd src && make all
make[1]: Entering directory `/root/redis-4.0.8/src'
    CC Makefile.dep
.
.
省略
.
.
Hint: It's a good idea to run 'make test' ;)

make[1]: Leaving directory `/root/redis-4.0.8/src'

もし以下のようなエラーが出た場合は、make distclean して古い情報を削除してから改めてコンパイルします。

# エラー
fatal error: jemalloc/jemalloc.h: No such file or directory

# 古い情報を削除する
make distclean

# 改めてコンパイル
make

コンパイルが完了したら、Redis をインストールします。

# Redis をインストールする
make install

# 実行結果
[root@localhost redis-4.0.8]# make install
cd src && make install
make[1]: Entering directory `/root/redis-4.0.8/src'
CC Makefile.dep
make[1]: Leaving directory `/root/redis-4.0.8/src'
make[1]: Entering directory `/root/redis-4.0.8/src'

Hint: It's a good idea to run 'make test' ;)

INSTALL install
INSTALL install
INSTALL install
INSTALL install
INSTALL install
make[1]: Leaving directory `/root/redis-4.0.8/src'

インストールが完了したら、起動します。

# Redis を起動する
src/redis-server

# 実行結果
[root@localhost redis-4.0.8]# src/redis-server
11626:C 08 Feb 23:18:18.897 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
11626:C 08 Feb 23:18:18.897 # Redis version=4.0.8, bits=64, commit=00000000, modified=0, pid=11626, just started
11626:M 08 Feb 23:18:18.898 * Increased maximum number of open files to 10032 (it was originally set to 1024).
                _._
           _.-``__ ''-._
      _.-``    `.  `_.  ''-._           Redis 4.0.8 (00000000/0) 64 bit
\/    _.,_ ''-._
 (    '      ,       .-`  | `,    )     Running in standalone mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
 |    `-._   `._    /     _.-'    |     PID: 11626
  `-._    `-._  `-./  _.-'    _.-'
 |`-._`-._    `-.__.-'    _.-'_.-'|
 |    `-._`-._        _.-'_.-'    |           http://redis.io
  `-._    `-._`-.__.-'_.-'    _.-'
 |`-._`-._    `-.__.-'    _.-'_.-'|
 |    `-._`-._        _.-'_.-'    |
  `-._    `-._`-.__.-'_.-'    _.-'
      `-._    `-.__.-'    _.-'
          `-._        _.-'
              `-.__.-'

ユーザ作成

Redis 実行用にユーザを作成していきます。

グループを作成します。

# redis グループを作成する
groupadd redis

次にユーザを作成します。

# redis ユーザを作成する
useradd -s /sbin/nologin -M -g redis redis

Redis のワークディレクトリを作成します。

# Redis のワークディレクトリを作成する
mkdir /etc/redis /var/run/redis /var/log/redis

ワークディレクトリの権限を変更します。

# ワークディレクトリの権限を変更する
chmod 755 /etc/redis /var/run/redis /var/log/redis

ワークディレクトリの所有者を変更します。

# ワークディレクトリの所有者を変更する
chown redis:redis /etc/redis /var/run/redis /var/log/redis

設定ファイルの編集とログファイルの作成

Redis の設定ファイルをコピーします。

# Redis の設定ファイルをコピーする
cp -p /root/redis-4.0.8/redis.conf /etc/redis/redis.conf

コピーした設定ファイルを編集します。デーモン化してバックグラウンドで稼働させるために「daemonize 」を有効にし、ログファイルを設定します。

# Redis の設定ファイルを編集する
vim /etc/redis/redis.conf

[redis.conf]
---------------------------
## daemonize を有効にする
#daemonize no
↓
daemonize yes

## ログファイルを設定する
#logfile ""
↓
logfile /var/log/redis.log
---------------------------

Redis へのアクセスにパスワードを使用する場合は requirepass として設定します。

[redis.conf]
---------------------------
## パスワードを設定する
requirepass pssword
---------------------------

接続元の限定などを設定する場合は bind として設定します。

[redis.conf]
---------------------------
## 接続元の制御
# 自サーバからの接続のみ
bind 127.0.0.1

# 任意の外部サーバからの接続を Listen する
bind 192.168.99.99

# 全ての IP からの接続を Listen する
bind 0.0.0.0
---------------------------

Redis のログファイルを作成します。中は空っぽで OK です。

# Redis のログファイルを作成する
vim /var/log/redis.log

ログファイルの所有者を変更します。

# ログファイルの所有者を変更する
chown redis:redis /var/log/redis.log

バックグラウンドで起動

デーモン化する設定を行ったので、バックグラウンドで Redis を起動します。

# Redis を起動する
cd /root/redis-4.0.8

sudo -u redis sh -c "src/redis-server /etc/redis/redis.conf --daemonize yes --dir /var/run/redis"

もしテストで Vagrant など仮想環境で構築している場合、特別に設定を行っていない場合は再起動した時点で/var/run/redis が失われている場合があるので、その場合は起動に失敗します。改めて作成してから起動を行ってください。

mkdir /var/run/redis
chmod 755 /var/run/redis
chown redis:redis /var/run/redis

動作確認

動作確認を行います。 redis-cli で redis server に接続し、対話的にコマンドを実行してみます。

# redis-cli で redis server に接続する
redis-cli -p 6379

# 実行結果
[root@localhost redis-4.0.8]# redis-cli -p 6379
127.0.0.1:6379> ping
PONG

接続できたら「ping 」と打ってみると、「PONG 」と返ってきました。

対話は「Ctrll + C 」で終了できます。

Redis サーバを停止させる場合は redis-cli で shutdown を叩きます。

# redis server を停止する
redis-cli shutdown

また、稼働中・停止などの状態は ps コマンドや netstat コマンドで確認する事が確認できます。

# ps コマンドで確認
ps -ef | grep [r]edis

# 実行結果
[root@localhost redis-4.0.8]# ps -ef | grep [r]edis
redis    11681     1  0 23:47 ?        00:00:00 src/redis-server 127.0.0.1:6379 

# netstat で確認
netstat -tln | grep 63*

# 実行結果
[root@localhost redis-4.0.8]# netstat -tln | grep 63*
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN

まとめ

以上で作業は完了です。これで Web アプリケーション側のサーバから接続してあれこれ出来るようになりました。

もちろん、現段階では永続化は行っていないので Redis サーバを落としたり再起動を行えばストアされたデータは消失します。

カスタマイズや設定など、まだまだやれることは多いですが、まずは入門はじめの一歩ということで、是非試してみてください。

Author

rito

  • Backend Engineer
  • Tokyo, Japan
  • PHP 5 技術者認定上級試験 認定者
  • 統計検定 3 級