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

Redis(NoSQLのインメモリKVSのデータベース)

このページは、Redis(NoSQLのインメモリKVSのデータベース)関連の技術情報を掲載しています。

▲記事トップへ

目次

この記事の目次です。

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

関連情報
更新履歴

1. Redisとは

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

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

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

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

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

2. インストール方法

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

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

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
$

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ファイルを解凍して、任意の場所に配置すれば使用できます。

実行

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

redis-server-windows-x64

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モジュールをインストール

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のコマンドです。

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

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

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

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

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

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

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のインストール

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のインストール

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にアクセスする場合は以下は考慮したいです。

NoSQLインジェクションに注意

RedisはNoSQLなのでSQLインジェクションにはあいませんが、NoSQLインジェクションが行われます。 入力値のサニタイズ(無毒化)処理は必須です。

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

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

関連情報

関連情報です。

データベース技術

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

詳細

更新履歴

更新履歴になります。

戻る

スポンサーリンク

サイト内のページ

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

開発環境
Ant /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アドレスは以下です。

34.239.147.7

HTMLの表示色確認ツール

パスワード生成ツール

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

ここに生成されます。

スポンサーリンク