トップ ITインフラ OSとミドルウェア Redis

Redisとは―NoSQLインメモリKVSデータベース、読み方、使い方など入門知識

Redisは、NoSQLインメモリKVSデータベースです。Redisの読み方や使い方など入門知識をまとめています。

▲記事トップへ

目次

この記事の目次です。

1. Redisとは
2. Redisのインストール方法
3. Redisのコマンド(redis-serverのコマンド、redis-cliの使い方など)
4. JavaでRedisを利用する方法
5. PHPでRedisを利用する方法
6. PythonでRedisを利用する方法
7. 入門時に知っておきたいセキュリティ観点

関連情報
更新履歴

1. Redisとは

Redisは、キーと値の対を保存するタイプのANSI Cで書かれたデータベースです。 すべてのデータセットをメモリ内に読み込むため高速に動作します。

Redisの読み方は「レディース」

Nginxを「エンジンエックス」と読むように実際の読み方はスペルから少し違うことがありますね。 Redis入門の第一歩は読み方と思います。

Redisの読み方は「レディース」です。 人によっては「レディス」と伸ばさない読み方もありますが、 入門当初から私の周囲ではみんな「レディース」といっていたので「レディース」を押しています。

一番初め周囲から聞いたとき、Redisのスペルがわからなくて、レディースと検索して探すのに苦労しましたので、読み方はレディースと強調してみました。 レディースと検索した人がRedisのスペルにたどりつけられればと思います。

RedisはNoSQL

RedisはNoSQLに分類されるデータベースです。

NoSQLとは

NoSQLは、SQLを使わないデータベースを大まかに分類する用語です。 SQLは関係データベース(RDB:Relational DataBase)で使われる言語で、RDB以外をNoSQLといいます。

NoSQLの読み方

NoSQLの読み方は「ノーエスキューエル」です。

Redisはインメモリデータベース

Redisはインメモリデータベースです。

インメモリデータベースとは

インメモリデータベースはデータストレージを主にメインメモリ上で行うデータベース管理システムです。

RedisはNoSQLインメモリKVSデータベース

Redisは、NoSQLインメモリKVSデータベースです。

KVSとは

KVSは、Key-Value Storeの略でKeyとValueを組み合わせる単純な構造からなるデータストアです。

代表的なKVSデータベース

代表的なKVSデータベースとしてはRedisの他にmemchaedやGoogleの分散データストアのBigTableなどが挙げられます。

Redisの用途

Redisの用途としては以下のような用途が挙げられます。

2. Redisのインストール方法

Redisのインストール方法についてです。 いろいろな環境、バージョンの例を挙げています。

Redisの最新版は「http://redis.io/download」よりダウンロードできます。

Linux(CentOS7)にRedisをインストール(ソースコンパイル)

以下は、CentOS7(64bit)、gcc 4.8.5の環境にRedis-3.2.3をインストールする例です。

環境

gcc、make、wgetのインストール

この手順では、gcc、make、wgetを使用しますので、インストールされていない場合はインストールします。

# yum -y install gcc make wget

インストール媒体のダウンロード

Redisのインストール媒体をダウンロードして、アーカイブを解凍します。

$ wget http://download.redis.io/releases/redis-3.2.3.tar.gz
$ tar xzf redis-3.2.3.tar.gz

なお、Redisの最新版は「http://redis.io/download">http://redis.io/download」で確認できます。

makeを実行

本環境の場合は、そのままmakeを実行すればOKです!Makefileの修正は不要です。

$ cd redis-3.2.3
$ make

実行

redis-serverを&を付けて、バックグラウンドで起動します。

$ src/redis-server &

redis-cliでコマンドを実行します。

$ src/redis-cli
redis 127.0.0.1:6379> set foo bar
OK
redis 127.0.0.1:6379> get foo
"bar"
redis 127.0.0.1:6379> exit
$

Linux(CentOS7)にRedisをインストール(yum)

上記では、ソースをコンパイルしてインストールしましたが、yumを使ってインストールした方が楽です。 ここでは、CentOS7にyumを使用してRedisをインストールし、サービスの自動起動設定まで行う手順を見ていきます。

EPELとREMIのインストール

そのままだと古いRedisがインストールされてしまいますので、EPELとREMIのインストールを行います。

# yum install epel-release
# wget http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
# sudo rpm -Uvh remi-release-7*.rpm

Redisのインストール

Redisをyumでインストールします。

# yum --enablerepo=remi,remi-test,epel install redis

インストール確認。2016年9月現在では3.2.3がインストールされました。

# redis-cli -v
redis-cli 3.2.3

サービス自動起動の設定

サービス自動起動の設定を行います。

# systemctl enable redis.service

Redisの起動

Redisを起動します。

# systemctl start redis.service

WindowsにRedisをインストール

このページでは、CentOS7(64bit)、gcc 4.8.5の環境にRedis-3.2.3をインストールする例です。

環境

Windows版の媒体をダウンロード

https://github.com/MSOpenTech/redis/releasesより、実行ファイル作成済みの媒体がダウンロードできます。

今回は「Redis-x64-3.2.100.zip」をダウンロードしました。

インストール

インストールはzipファイルを解凍して、任意の場所に配置すれば使用できます。

Windowsにインストールしたredis-serverを起動

Redis Servverは、コマンドプロンプトあるいはredis-server.exeをダブルクリックして起動できます。

redis-server-windows-x64

redis-cliもインストールしたWindowsで利用できる

Redisクライアントも同様にコマンドプロンプトあるいはredis-cli.exeをダブルクリックして起動できます。

redis-cli-windows-x64

CentOS 6.5、gcc 4.4.7の環境にredis-3.0.5をインストールする例

CentOS 6.5(64bit)、gcc 4.4.7の環境にredis-3.0.5をインストールする例です。

環境

媒体をダウンロードして解凍

Redisのインストール媒体をダウンロードして、アーカイブを解凍します。

$ wget http://download.redis.io/releases/redis-3.0.5.tar.gz
$ tar xzf redis-3.0.5.tar.gz

なお、Redisの最新版は「http://redis.io/download」で確認できます。

makeを実行

本環境の場合は、そのままmakeを実行すればOKです!Makefileの修正は不要です。

$ cd redis-3.0.5
$ make

プレ実行

redis-serverを&を付けて、バックグラウンドで起動します。

$ src/redis-server &

redis-cliでコマンドを実行します。

$ src/redis-cli
redis 127.0.0.1:6379> set foo bar
OK
redis 127.0.0.1:6379> get foo
"bar"
redis 127.0.0.1:6379> exit
$

インストール

Redisの実行ファイルを配置します。

$ sudo make install

起動スクリプトを配置

/etc/init.d/redisを作成します。

$ sudo vi /etc/init.d/redis

#!/bin/sh
. /etc/rc.d/init.d/functions

name="redis-server"
exec="/usr/local/bin/$name"
pidfile="/var/run/redis/redis.pid"
REDIS_CONFIG="/etc/redis/6379.conf"

[ -e /etc/sysconfig/redis ] && . /etc/sysconfig/redis

lockfile=/var/lock/subsys/redis

start() {
    [ -f $REDIS_CONFIG ] || exit 6
    [ -x $exec ] || exit 5
    echo -n $"Starting $name: "
    daemon --user root "$exec $REDIS_CONFIG"
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile
    return $retval
}

stop() {
    echo -n $"Stopping $name: "
    killproc -p $pidfile $name
    retval=$?
    echo
    [ $retval -eq 0 ] && rm -f $lockfile
    return $retval
}

restart() {
    stop
    start
}

reload() {
    false
}

rh_status() {
    status -p $pidfile $name
}

rh_status_q() {
    rh_status >/dev/null 2>&1
}

case "$1" in
    start)
        rh_status_q && exit 0
        $1
        ;;
    stop)
        rh_status_q || exit 0
        $1
        ;;
    restart)
        $1
        ;;
    reload)
        rh_status_q || exit 7
        $1
        ;;
    force-reload)
        force_reload
        ;;
    status)
        rh_status
        ;;
    condrestart|try-restart)
        rh_status_q || exit 0
        restart
        ;;
    *)
        echo $"Usage: $0 {start|stop|status|resvi tart|condrestart|try-restart}"
        exit 2
esac
exit $?

アクセス権を設定します。

$ sudo chmod 700 /etc/init.d/redis

Redisの設定ファイルを作成

redis-3.0.5ディレクトリにあるredis.confをコピーして、/etc/redis/6379.confにRedisの設定ファイルを作成します。

$ sudo cp redis.conf /etc/redis/6379.conf
$ sudo vi /etc/redis/6379.conf

daemonize noのところをdaemonize yesに変更します。

サービスの自動起動設定

マシン再起動時に自動起動するようにサービスの自動起動設定を行います。

$ sudo chkconfig redis on

Redisを起動

Redisを起動します。

sudo /etc/init.d/redis start

redis-cliでコマンドを実行します。

$ src/redis-cli
redis 127.0.0.1:6379> set foo bar
OK
redis 127.0.0.1:6379> get foo
"bar"
redis 127.0.0.1:6379> exit
$

補足)古いRedisのアンインストール

古いRedisがある場合のアンインストール例です。

  1. Redisを停止します。
    # redis-cli
    127.0.0.1:6379> shutdown
    (38.04s)
    not connected> exit
    
  2. redis関連のファイルをgrepします。
    # find / |grep redis
    
  3. grepで抽出したファイルを削除します。
    # rm /usr/local/bin/redis-check-dump
    # rm /usr/local/bin/redis-benchmark
    # rm /usr/local/bin/redis-check-aof
    # rm /usr/local/bin/redis-server
    # rm /usr/local/bin/redis-cli
    :
    

簡易インストールの例(PHPでRedisを使う場合)

# make install
# redis-server /etc/redis.conf

インストール確認

# redis-cli ping
PONG

# redis-cli
redis 127.0.0.1:6379> ping
PONG
redis 127.0.0.1:6379> set mykey somevalue
5.OK
redis 127.0.0.1:6379> get mykey
somevalue
redis 127.0.0.1:6379> exit

PHPのredisモジュールをインストール(yum install php-pecl-redis)

PHPのredisモジュールをインストールします。

# yum install php-pecl-redis

PHPのredisモジュールをインストール確認

下記コードでPHPから正常に利用できるか確認します。 RedisサーバーとPHPサーバーが別サーバーの場合は、pconnect()の引数をRedisサーバーのIPアドレスに変更してください。

<?php
$redis = new Redis();
$connected = $redis->pconnect('127.0.0.1');
$redis->set('foo', 'bar');
print_r($redis->get('foo'));

サービス登録

サービス登録を行います。

# cp redis /etc/init.d/.
# chmod 755 /etc/init.d/redis
# chkconfig --add redis
# chkconfig redis on
# /sbin/chkconfig --list | grep redis
redis           0:off   1:off   2:on    3:on    4:on    5:on    6:off

# vi /etc/sysconfig/iptables
-A INPUT -p tcp --dport 6379 -j ACCEPT

3. Redisのコマンド(redis-serverのコマンド、redis-cliの使い方など)

Redisのコマンドです。アプリケーションやredis-cliで実行できます。 ここではredis-cliを使用してRedisのコマンドについて解説していきます。

redis-serverのコマンド

redis-serverのコマンドについてです。

Redisのバージョン確認(redis-server --version/redis-server -v)

Redisのバージョンは「redis-server --version」もしくは「redis-server -v」で確認できます。

$ redis-server --version
$ redis-server -v

Redisのコマンドとredis-cliの使い方

Redisのコマンドとredis-cliの使い方についてです。

redis-cliはRedisをインストールすると使える

redis-cliはRedisをインストールすると使用できます。

redis-cliでRedisのDB切り替え(select <DBインデックス>)

selectコマンドでDBインデックスが切り替えられます。

$ redis-cli
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]>

redis-cliでRedisのデータベースの数の設定を確認(config get databases)

config get databasesコマンドでRedisのデータベースの数の設定を確認出来ます。

$ redis-cli
127.0.0.1:6379> config get databases
1) "databases"
2) "16"

4. JavaでRedisを利用する方法

前提として、Javaの入門知識がないと使えません。説明を理解するにはEclipseやmevenの知識も必要です。

以下は、RedisのJavaクライアントライブラリ(Jedis)の使用方法をまとめています。

Jedisとは

JedisはRedisクライアント機能が利用できるJavaのライブラリです。

ダウンロード先

Jedisは「https://github.com/xetorthio/jedis」からダウンロードできます。

mevenリポジトリ

mavenのpom.xmlの指定は以下です。

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.8.1</version>
    <type>jar</type>
    <scope>compile</scope>
</dependency>

サンプル

以下では、Jedisを使用いて、Redisと連携するJavaの入門プログラムを作成して実行してみます。

package sample;

import redis.clients.jedis.Jedis;

public class Sample {

	public static void main(String[] args) {
		Jedis jedis = new Jedis("127.0.0.1", 6379, 1000);
		jedis.connect();
		jedis.set("message", "Hello World!!");
		String value = jedis.get("message");
		jedis.disconnect();
		System.out.println("value=" + value);
	}
}

実行すると「value=Hello World!!」と標準出力されます。

参考

5. PHPでRedisを利用する方法

前提としてテスト用のものでもLinuxサーバなど、サーバをある程度セットアップできる知識が必要です。上述のRedisのインストールが行えれば十分です。

php-pecl-redisのインストール(yum -y install php-pecl-redis)

php-pecl-redisを使用いて、Redisと連携するPHPの入門プログラムを作成して実行してみます。 インストールはyumでインストールします。

# yum -y install php-pecl-redis

Redisと連携するPHPの入門プログラムを作成して実行してみます。 RedisサーバーとPHPサーバーが別サーバーの場合は、pconnect()の引数をRedisサーバーのIPアドレスに変更してください。

<?php
$redis = new Redis();
$connected = $redis->pconnect('127.0.0.1');
$redis->set('foo', 'bar');
print_r($redis->get('foo'));

6. PythonでRedisを利用する方法

PythonでRedisを利用する方法をまとめています。

Python redis-pyのインストール(pip install redis)

Python用のRedisドライバはPythonのパッケージインストールツールのpipから行えます。pipは、Python3の場合標準でインストールされるツールになります。

pip install redis

早速、RedisをPythonで操作してみます。

PythonでRedisに接続

import redis
con = redis.Redis(host='localhost', port=6379, db=0)

PythonでRedisにset型データ追加

con.set('aaa','bbb')

PythonでRedisのset型のデータ取得

con.get('aaa')

PythonでRedisのデータ一覧取得

con.keys()

7. 入門時に知っておきたいセキュリティ観点

Redisの入門時に知っておきたいセキュリティ観点をまとめていきます。

Redisを標的としたアクセスに注意

Redisはデフォルトでは、ローカルからのみアクセス可能な設定ですが、外部からアクセスできるように変更する場合は注意が必要です。 インターネットに接続から接続される可能性がないかなど十分に配慮が必要です。 警察庁によるとRedisを狙ったアクセスも観測されているとのことです。

参考)https://www.npa.go.jp/cyberpolice/detect/pdf/20160113.pdf

リモート接続でRedisにアクセスする場合は以下は考慮したいです。

RedisはNoSQLインジェクション(NoSQL Injection)に注意

RedisはNoSQLなのでSQLインジェクションにはあいませんが、NoSQLインジェクション(NoSQL Injection)の脆弱性を作りこむ恐れがあります。 入力値のサニタイズ(無毒化)処理は必須です。

Webページキャッシュ利用する際の注意点

RedisとWordPressを連携すると驚くほど表示が早くなります。 ただアクセレーターと同様に注意が必要です。 ページがキャッシュされるわけですので、ダッシュボードのページなどキャッシュされてほしくないページがキャッシュされないか十分に検証が必要です。

関連情報

関連情報です。

データベース技術

データベースとは何か、データベースのモデル、データベースの制御など、データベース技術についてまとめています。

詳細

更新履歴

更新履歴になります。

戻る

スポンサーリンク

サイト内のページ

言語
C・C++ /HTML /Java /JavaScript /PHP /シェルスクリプト

開発環境
Ant /Burp /Eclipse /Fiddler /gcc /gdb /Git /g++ /JDK /JMeter /JUnit /Teraterm /ZAP

技術・仕様
Ajax /CORBA /Jakarta EE(旧称J2EE、Java EE) /JNI

ライブラリ/Framework/CMS
bootstrap /jQuery /FuelPHP /Lucene /MyBatis /Seasar2 /Spring /Struts /WordPress

Web API
Google Maps

ITインフラOSとミドルウェア
Linux /Windows /シェル
ActiveMQ /Tomcat /MariaDB /MySQL /Nagios /Redis /Solr

ITインフラサーバー
公開Webサーバー

ITインフラネットワーク
プログラミング /構築

ITインフラセキュリティ
公開サーバーのセキュリティ

PC製品
ZOTAC

SI
ホームページの作り方

その他
IT用語 /ITスキル体系

スポンサーリンク

関連サイト内検索ツール

zealseedsおよび関連サイト内のページが検索できます。

IPアドレス確認ツール

あなたのグローバルIPアドレスは以下です。

3.143.235.104

HTMLの表示色確認ツール

パスワード生成ツール

文字数のプルダウンを選択して、取得ボタンを押すと「a~z、A~Z、0~9」の文字を ランダムに組み合わせた文字列が表示されます。

ここに生成されます。

スポンサーリンク