LotosLabo

プログラミング技術とか気になった情報を載せていきます

Redisについて


Redisとは

読み方は「レディス」でいいかと思います。
こちらも先ほどのNoSQLと同じように種類のデータベースです。

インメモリデータベースなため、ものすごく速いという特徴があります。

そして永続化という、定期的にディスクに書き出す特徴
データ構造サーバーという特徴があります。

開発環境

LinuxOSを使っていきます。

VMWareでもVirtualBoxでもいいのでLinuxを起動します。



使うソフトは 「端末」というターミナルのみです。
これでインストールから起動まですべてが出来ます。


ではまず、端末を起動しましょう。
メニューバーの一番上にある、「コンピュータとオンラインリソースを検索」より、
キーワード欄に「端末」と入力すれば出てきます。

起動するとこんなかんじです。


本当だったら端末よりインストールも全て出来たのですが、何か不具合によりインストールだけ出来なかったので、Web上よりインストールファイルをダウンロードしてきました。

http://redis.io/download

ここより、Stable版をダウンロードして、ユーザーディレクトリ内にファイルを作成して、展開しました。
私ので言うと、home/lotos/Radis/redis-2.8.6(ダウンロードしたやつ)
という感じです。


そしてまずは、端末のコマンドcdでこのディレクトリまで移り、

make testと入力してインストールします。


結構時間がかかると思いますので、少々お待ちください。


次にredis-serverをインストールします。
その前に コマンド apt-get というのを使うのでアップデートする必要があります。



sudo apt-get update

とした後に、



sudo apt-get install redis-server

でインストールできます。

ちなみに、sudo というのは super user do という意味です。


redisの起動


まずはredisはmongodbと同じで、サーバー側と、コマンドを入力する方と
二つターミナルを用意する必要があります。

まずサーバー側の方です。

redis-server

と入力するとサーバーが立ち上がるはずです。
立ち上がらない時は一回、redis-cli と入力し、shutdownと入力して、もう一回
サーバーを起動するとうまくいくはずです。


こんなかんじにイカしたマークが表示されると思います。

f:id:lo25131:20140329223032j:plain


次にコマンド側のほうです。
もう一つ、端末を立ち上げて

redis-cli

と入力します。

f:id:lo25131:20140329223239j:plain


とりあえず最初に、ほんとにサーバーにつながっているかどうかのコマンドを紹介します。

ping

と入力して

PONG  と返ってくればつながっています。


サーバーを終了するには、redisのコマンドの方で、shutdown
redis自体を終了するにはexitです。


redisの基本用語

まずコマンドを打つ前に、用語の説明をします。

Redisは KVS というもので成り立っています。

Key
Value
Store

です。

そして必ず key と Valueはセットで使うことが約束です。

key  Value
↓   ↓
name "lotos"
email "lotos.welt@gmail.com"
score 200

という感じ。

次にデータ型の種類です。

String   : 個々の要素
List    : 順番に並べた複数の要素
Set    :順不同の複数の要素、重複を許さない
Sorted Set  :Setの特徴を持ちつつ、個々の要素にスコア付き
Hash    :連想配列であり、ラベルと値のセット

redisを始める


まず最初にデータベースの選択をします。
Select 0   と入力し、0番目のデータベースを選択します。


そしたらデータの保存(バックアップ)を取るために
bgsave と入力します。
コレを行うことで、再度起動させた時にそれが読み込まれます。


なお、redisを起動させるときには、専用のディレクトリを用意していおいたほうがいいかと思います。
私は home/lotos/redis とディレクトリを作成し、指定したからredisを起動しました。
作られたバックアップファイルはこのようになっています。


f:id:lo25131:20140330151245j:plain



String型を使う

値を格納

set key value

例:
set name lotos

複数格納する

mset value key value key

例:
mset email lotos.welt@gmail.com score 4

値の取得

get key

例:
get name


(値の複数取得)

mget key1 key2 key3


例:
mget name email score


ここまでやったのがこれです。

f:id:lo25131:20140330151820j:plain



また数字に対して行う インクリメントとデクリメントというのがあります。

インクリメント

incr / incrby

例: incr score
120 が 121に増える

例: incrby score 10
120 が 130に増える

デクリメント

decr  / decrby

例: decr score
120が 119に減る

例: decrby score 10
120が110に減る


Keyの操作を行う

keyの一覧を見る

keys *


指定して取得

keys *m*

mを含むものだけ取得


存在しているかどうか調べる

exists key

例:
exists score

ある場合は 1
ない場合は 0


削除

del key

例:
del score

名前変更

rename 元の名前 新しい名前

例:
rename score score1


keyに有効期限をつける

expire key 秒数

例:
expire score 5

5秒間だけ有効にする(5秒後に消える)

keyをランダム出力

randomkey


List型

[key][value]を両方使います。

List型にはpushpopというものがあり、

追加: push l/r 左から追加か右から追加
削除: pop l/r 左から削除か右から削除

を使って追加と削除をしていきます。

末尾から追加

rpush リストにするもの 値


例: 末尾から追加
rpush mycolor red
rpush mycolor green
rpush mycolor blue




先頭から追加

lpush リストにするもの 値


例: 先頭から追加
lpush mycolor red


先頭から出力

lrange リスト 数値1 数値2


例:リストの先頭から出力
lrange myclor 0 3

0から3番目を先頭から指定して出力


末尾から出力

rrange リスト 数値1 数値2


例:リストの末尾から出力
rrange mycolor 0 3

0から3番目を末尾から指定して出力


末尾から削除

rpop リスト

例:リストの末尾から削除
rpop mycolor

先頭から削除

lpop リスト

例:リストの先頭から削除
lpop mycolor


指定して出力

lindex リスト 2

例:
lindex mycolor 2
(2番目を取り出す、順番では3番目)


要素の数

llen リスト

例:
llen mycolor

指定した数のみにする

ltrim リスト 数値1 数値2

例:
ltrim mycolor 0 2

先頭の3つだけになる


また上の3つで説明した先頭の「l」 は leftの「l」ではなく、 Listの「l」なので、
Rightは使えない。



Set型


追加: sadd
削除: srem

を使用する

追加する

sadd 項目 値

例:
sadd mysports basketball
sadd mysports volleyball
sadd mysports soccer

もちろん連続でもいいです。
sadd mysports basketball soccer volleyball


一覧を見る

smembers 項目

例:
smemebers mysports


削除する

srem 項目 値

例:

srem mysports soccer


和集合

sunion 項目1 項目2

例:
sunion mysports mysports2

差集合

sdiff 項目1 項目2

例:
sdiff mysports mysports2


積集合

sinter 項目1 項目2

例:
sinter mysports mysports2




Sorted set型


追加: zadd
削除: zrem

を使用する。


追加する

zadd 項目名 順番 値

例:
zadd myname 21 lotos
zadd myname 20 john
zadd myname 22 saitou
zadd myname 23 michel


一覧を見る

zrange 項目

例:
zrange myname 0 2

順番が低い方から並べられて出力される


逆に並べる

zrevrange 項目

例:
zrevrange myname 0-2



順番を調べる

zrank 項目 値

例:
zrank myname lotos
=> 2

下から3番目


逆の順番

zrevrank 項目 値

例:
zrevrank myname lotos
=> 2

上から3番め


削除する

zrem 項目 値

例:
zrem myname john



Hash型

コマンド 項目名 key value

値の追加

hset

例:
hset user name lotos


値の複数追加

hmset

例:
hmset user name lotos email lotos.welt@gmail.com score 20


値の取得

hget

例:
hget user name


値の複数取得

hmget

例:
mhget user name email score


値の数を取得

hlen

例:
hlen user


キーを一覧で見る

hkeys 項目名

例:
hkeys user


値を一覧で見る

hvals 項目名

例:
hvals user


すべてを見る

hgetall 項目名

例:
hgetall user


並び替え


並び替えには Sort というものを使います。

昇順

sort 項目

例:
sort myscore

降順

sort 項目 desc

例:
sort myscore desc


制限

sort 項目名 desc limit 数字

例:
sort myscore desc lilmit 0 3

上位三人を指定

アルファベット順

例:
sort mycolor alpha


逆アルファベット順

例:
sort mycolor alpha desc


multiとexec


いわゆるデータベースのTransactionのようなものです。
複数の処理を一気にやりたいときに使います。


multi - 開始 -
処理1
処理2
処理3
exec - 終了 -



途中で止めるときには

multi - 開始 -
処理1
処理2
処理3
discard - 中断 -