Redisは、NoSQLインメモリKVSデータベースです。Redisの読み方や使い方など入門知識をまとめています。
この記事の目次です。
1. Redisとは
2. Redisのインストール方法
3. Redisのコマンド(redis-serverのコマンド、redis-cliの使い方など)
4. JavaでRedisを利用する方法
5. PHPでRedisを利用する方法
6. PythonでRedisを利用する方法
7. 入門時に知っておきたいセキュリティ観点
Redisは、キーと値の対を保存するタイプのANSI Cで書かれたデータベースです。 すべてのデータセットをメモリ内に読み込むため高速に動作します。
Nginxを「エンジンエックス」と読むように実際の読み方はスペルから少し違うことがありますね。 Redis入門の第一歩は読み方と思います。
Redisの読み方は「レディース」です。 人によっては「レディス」と伸ばさない読み方もありますが、 入門当初から私の周囲ではみんな「レディース」といっていたので「レディース」を押しています。
一番初め周囲から聞いたとき、Redisのスペルがわからなくて、レディースと検索して探すのに苦労しましたので、読み方はレディースと強調してみました。 レディースと検索した人がRedisのスペルにたどりつけられればと思います。
RedisはNoSQLに分類されるデータベースです。
NoSQLは、SQLを使わないデータベースを大まかに分類する用語です。 SQLは関係データベース(RDB:Relational DataBase)で使われる言語で、RDB以外をNoSQLといいます。
NoSQLの読み方は「ノーエスキューエル」です。
Redisはインメモリデータベースです。
インメモリデータベースはデータストレージを主にメインメモリ上で行うデータベース管理システムです。
Redisは、NoSQLインメモリKVSデータベースです。
KVSは、Key-Value Storeの略でKeyとValueを組み合わせる単純な構造からなるデータストアです。
代表的なKVSデータベースとしてはRedisの他にmemchaedやGoogleの分散データストアのBigTableなどが挙げられます。
Redisの用途としては以下のような用途が挙げられます。
Redisのインストール方法についてです。 いろいろな環境、バージョンの例を挙げています。
Redisの最新版は「http://redis.io/download」よりダウンロードできます。
以下は、CentOS7(64bit)、gcc 4.8.5の環境にRedis-3.2.3をインストールする例です。
この手順では、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を実行すれば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 $
上記では、ソースをコンパイルしてインストールしましたが、yumを使ってインストールした方が楽です。 ここでは、CentOS7にyumを使用してRedisをインストールし、サービスの自動起動設定まで行う手順を見ていきます。
そのままだと古い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を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を起動します。
# systemctl start redis.service
このページでは、CentOS7(64bit)、gcc 4.8.5の環境にRedis-3.2.3をインストールする例です。
https://github.com/MSOpenTech/redis/releasesより、実行ファイル作成済みの媒体がダウンロードできます。
今回は「Redis-x64-3.2.100.zip」をダウンロードしました。
インストールはzipファイルを解凍して、任意の場所に配置すれば使用できます。
Redis Servverは、コマンドプロンプトあるいはredis-server.exeをダブルクリックして起動できます。
Redisクライアントも同様にコマンドプロンプトあるいはredis-cli.exeをダブルクリックして起動できます。
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を実行すれば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-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を起動します。
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-cli 127.0.0.1:6379> shutdown (38.04s) not connected> exit
# find / |grep redis
# 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 :
# 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サーバーと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
Redisのコマンドです。アプリケーションやredis-cliで実行できます。 ここではredis-cliを使用してRedisのコマンドについて解説していきます。
redis-serverのコマンドについてです。
Redisのバージョンは「redis-server --version」もしくは「redis-server -v」で確認できます。
$ redis-server --version $ redis-server -v
Redisのコマンドとredis-cliの使い方についてです。
redis-cliはRedisをインストールすると使用できます。
selectコマンドでDBインデックスが切り替えられます。
$ redis-cli 127.0.0.1:6379> select 1 OK 127.0.0.1:6379[1]>
config get databasesコマンドでRedisのデータベースの数の設定を確認出来ます。
$ redis-cli 127.0.0.1:6379> config get databases 1) "databases" 2) "16"
前提として、Javaの入門知識がないと使えません。説明を理解するにはEclipseやmevenの知識も必要です。
以下は、RedisのJavaクライアントライブラリ(Jedis)の使用方法をまとめています。
JedisはRedisクライアント機能が利用できるJavaのライブラリです。
Jedisは「https://github.com/xetorthio/jedis」からダウンロードできます。
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!!」と標準出力されます。
前提としてテスト用のものでもLinuxサーバなど、サーバをある程度セットアップできる知識が必要です。上述の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'));
PythonでRedisを利用する方法をまとめています。
Python用のRedisドライバはPythonのパッケージインストールツールのpipから行えます。pipは、Python3の場合標準でインストールされるツールになります。
pip install redis
早速、RedisをPythonで操作してみます。
import redis con = redis.Redis(host='localhost', port=6379, db=0)
con.set('aaa','bbb')
con.get('aaa')
con.keys()
Redisの入門時に知っておきたいセキュリティ観点をまとめていきます。
Redisはデフォルトでは、ローカルからのみアクセス可能な設定ですが、外部からアクセスできるように変更する場合は注意が必要です。 インターネットに接続から接続される可能性がないかなど十分に配慮が必要です。 警察庁によるとRedisを狙ったアクセスも観測されているとのことです。
参考)https://www.npa.go.jp/cyberpolice/detect/pdf/20160113.pdf
リモート接続でRedisにアクセスする場合は以下は考慮したいです。
RedisはNoSQLなのでSQLインジェクションにはあいませんが、NoSQLインジェクション(NoSQL Injection)の脆弱性を作りこむ恐れがあります。 入力値のサニタイズ(無毒化)処理は必須です。
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インフラセキュリティ
公開サーバーのセキュリティ
SI
ホームページの作り方
スポンサーリンク
関連サイト内検索ツール
zealseedsおよび関連サイト内のページが検索できます。
IPアドレス確認ツール
あなたのグローバルIPアドレスは以下です。
3.143.235.104
HTMLの表示色確認ツール
パスワード生成ツール
文字数のプルダウンを選択して、取得ボタンを押すと「a~z、A~Z、0~9」の文字を ランダムに組み合わせた文字列が表示されます。
ここに生成されます。
スポンサーリンク
Copyright (C) 2007-2024 zealseeds. All Rights Reserved. Loarding…