Morning Girl

Web API, Windows, C#, .NET, Dynamics 365/CRM etc..

Windows版Redisをインストールして触ってみる

お仕事で最近redisと戯れていますので、個人的に色々とまとめておきたいと思います。

(個人的にRedisは今までWeb サイトのセッション管理で他の人が作ったものを見たことがあるくらいだったので)

f:id:sugimomoto:20171130004833p:plain

Redis公式

https://redis.io/

redisドキュメント日本語訳

http://redis.shibu.jp/index.html

Redisってなんじゃらほい

まあ、今更私がどうのこうのというものではありませんが、大きな特徴は下記2つかなと思っています。

・Key-Value型のNoSQLデータベース

・In-Memoryで動作

基本的にはIn-Memoryで動作しますが、永続化の設定によって定期的、もしくはInputの度にディスクへ書き込む設定も可能みたいです。

でも、RedisのIn-MemoryによるI/Oの速さを活かすなら、常にディスクへの書き込みはボトルネックになりそうですね。

ディスクへの書き込み設定をしていなければ、もちろんサービス再起動時にデータは消失します。

わたしが初めて触ったのは、Azure Redis Cacheだったので、Cacheデータベースとして利用するイメージが強かったですが、ゲームコンテンツの管理とかにも向いていそうですね。

消失してもダメージが少ないけれど、大量のアクセスをさばく必要があるものに向いているという感じですね。

IoTのセンサーデータもいいかも?

以下のスライドがとても参考になりました!

Redisの特徴と活用方法について

www.slideshare.net

どんなデータ型が扱えるのか

ざっとイメージはこんな感じ。

f:id:sugimomoto:20171130005004p:plain

・文字列型

バイナリセーフ。JPEGなどのバイナリでも、シリアライズされたオブジェクトでも。
最大1GBまで。

インクリメント・デクリメント等ができるINCRコマンドからは整数値として扱われる。
http://redis.shibu.jp/commandreference/strings.html#command-INCR

以下で紹介するあと4種類の型の値はすべて、この文字列型として扱われる模様。

・リスト型

文字列型を入力できる配列。
セットの要素数の最大値は 2^32-1(4294967295, 1セットあたり4億以上のメンバ)とのこと。

・セット型

リスト型とは違って、順不同に文字列型を入力できる型
メンバーの重複は不可。
2つのセット型から集合演算を用いて値を抽出できるが面白い。

http://symfoware.blog68.fc2.com/blog-entry-571.html

要素数の最大値は、リスト型と同じ。

・ソート済みセット型

セット型に対して、さらにスコア値をもたせたもの。
名前の通り値を挿入した時点で、スコアを元にソートしてくれる。
スコアはdouble・倍精度浮動小数で入力。
ランキングを返してくれえる関数(*RANK)があるので、いちいちクライアント側での計算が不要。

要素数の最大値は、リスト型と同じ。

・ハッシュ型

つまるところ連想配列。
FieldとValueを指定して入力する。ちなみにFieldも文字列型の模様。

要素数の最大値は、リスト型と同じ。

個人的に面白いと感じたもの

日本語のRedisドキュメントのケーススタディにRedisとPythonを使って、Twi○terみたいなやつを作りましょうっていうケーススタディがあるんですが、これが読むだけでもなかなかおもしろい。

[http://redis.shibu.jp/tutorial/index.html]

特にKey-ValueのKey命名パターン

ユーザーIDを生成して、ユーザー名とパスワードのValueを文字列型に格納しているんだけど

INCR global:nextUserId => 1000

SET uid:1000:username antirez

SET uid:1000:password p1pp0

Keyの命名が「uid:ナンバー:username」もしくは「uid:ナンバー:password」なんですよね。 あーなるほど。こんな風にKey-Valueストアだと、データの構造体の生成と、値の設定・取得を行うんだーと。

Key-Valueに馴染みがなかった自分には、このKey命名パラーンはとても新鮮でした。

Windows版のインストール

Windows版はマイクロソフトが提供しています。

以下からダウンロード可能(最終更新日が2016年7月・・・。Azureに全振りかなぁ。)

https://github.com/MicrosoftArchive/redis/releases

ローカルで動かすだけであれば、特に細かな設定は不要。

そのままダイアログをNextしていくだけでOK。

f:id:sugimomoto:20171130005132p:plain

f:id:sugimomoto:20171130005137p:plain

f:id:sugimomoto:20171130005142p:plain

ローカルポートはDefaultが6379です。

f:id:sugimomoto:20171130005147p:plain

MemoryLimitは、今回特に設定しませんでした。

実際に動かす環境では注意したいところかと思います。

f:id:sugimomoto:20171130005154p:plain

f:id:sugimomoto:20171130005159p:plain

これだけで、インストール完了。

f:id:sugimomoto:20171130005206p:plain

コマンド

あとは、「‪C:\Program Files\Redis\redis-server.exe」でローカルでRedisサーバーを起動。

デフォルトポートは6379

標準でCLIツール「‪C:\Program Files\Redis\redis-cli.exe」が付いているので、これでそのまま遊べます。


とりあえず文字列の操作

>set key1 HelloRedis //値の設定

OK

>get key1 // 取得

"HelloRedis"

リスト型

>RPUSH rkey1 orange // リストの生成と右から値の挿入

(integer) 1

>rpush rkey1 apple // もう一個右から挿入 lpushにすると、前から挿入

(integer) 2


>llen rkey1 // 桁数の取得

(integer) 2

>lrange rkey1 0 2 // 対象キーの0~2番目まで取得

1) "orange"

2) "apple"

セット型

>sadd skey1 apple orane remon // セット型を作成 一括も指定可能。

(integer) 3

>sadd skey2 apple banana // もう一個セット型を作成

(integer) 2

>sinter skey1 skey2 // 集合演算。skey1とskey2で重複しているValueを取得してみる

1) "apple"

>sunion skey1 skey2 // Union。対象キーのValueを全部表示。(重複しているものは、繰り返さない)

1) "apple"

2) "remon"

3) "banana"

4) "orane"

ソート済みセット型

>zadd zkey1 100 kazuya // ソート済みセット型の作成。2番めのパラメータがスコア

(integer) 1

>zadd zkey1 200 takahashi // もう一個追加

(integer) 1

>zadd zkey1 300 saito // もう一個追加

(integer) 1

>zrank zkey1 kazuya // 対象キーのメンバーが今ランキング何位かを算出

(integer) 0

>zrank zkey1 saito // もう一個確認してみる

(integer) 2

ハッシュ型

>hset hkey1 name apple // ハッシュ型作成。nameがハッシュ値。aplleがValue

(integer) 1

>hset hkey1 type fruit // ハッシュを追加

(integer) 1

>hget hkey1 name // keyとhashを指定して、Valueを取得

"apple"

>hmget hkey1 name type

1) "apple"

2) "fruit"

>hgetall hkey1 // hgetallを使うと、hashとValueを交互に取得可能

1) "name"

2) "apple"

3) "type"

4) "fruit"

とりあえず、ここまで。

参考

Redis公式

https://redis.io/

redisドキュメント日本語訳

http://redis.shibu.jp/index.html

Azure Redis Cache ドキュメント

https://docs.microsoft.com/ja-jp/azure/redis-cache/

Redis 入門

http://mayo.hatenablog.com/entry/2013/10/15/074237

Redisデータ永続化の種類とサービス稼動時の切り替え注意点

https://qiita.com/KurosawaTsuyoshi/items/f7d74f2c60df188dbd6d