Redisについて
今触ってて人に説明できるようになれってことなので簡単にまとめ てみる
・redisって?
正式名称はRemote dictionary server
RedisはインメモリDB( メモリ上にデータを保存するタイプのデータベース) のひとつですが、単なるKVS(キーと値の組を書き込み、 キーを指定することで値を読み出せるデータベース)ではなく、 永続性やデータ型のサポートといった特徴があり、 Webアプリケーションの開発と親和性が高いといえます。
その名のとおりメモリ上にデータを保存するタイプのデータベース 。
メモリはCPUから直接アクセスできるため、( レリーショナルDBなどの) ストレージにデータを保存するオンディスクDBより、 ずっとはやい!
他のインメモリDB(memcachedなど) は揮発性メモリにデータを格納するので、 電源を切るとデータを失ってしまいます…がredisの場合
一定期間ごとなどの条件でスナップショットをとり、 再起動時にメモリ上に展開することでデータを永続化することがで きます。
また、単純なKVSではなく、文字列やハッシュ、 セットといったさまざまデータ型があります。
このデータ型を利用することで、 たとえばソートやランキングといった機能を容易に実現することが できます。
ただし、 RedisはRDBに比べて次にようなデメリットもあります。
容量が制限されてしまいます。 高速な分容量が少ないので、大きなデータの格納には向きません。
クラッシュセーフではありません。 スナップショットを取っているとはいえメモリは揮発的であり、 クラッシュするとデータが飛んでしまいます。
そのため最悪の場合失っても問題がないもの、 高速な読み書きが必要なもの
という性質のデータを格納するのに適していると考えられます。
たとえば動的なページのキャッシュなどがこれにあたります。
・データ型が5種
データ型ごとにさまざまなコマンドも用意荒れているので、 それらを組み合わせるといろいろな形に対応可能。
string:keyとvalueは1:1 Cookieに近い管理のされ方で、 セッションサーバとして使用する場合はString型でデータ格 納すると管理がしやすい。
hash:第一key,第二key,Value 親Keyを商品ID、 子キーを商品の属性情報を保存するような形で使用すれば、 RDBでのデータ管理に近い考え方で使うことができる。
list:key1つに対しvalueが複数登録可能 登録順も記録 配列のような形でデータを取り扱うことができる。 アクセスログとかにも使えるかも。
set:key1つに対しvalueが複数登録可能 登録順は非記録 異なるKeyで管理されたデータ群同士で、和・差・ 積を算出することができる謎機能を搭載 list型でよくない?
sortedset:key,sorce,valueの順 sorce順に並べられる 主にゲームなどの得点管理、 ランキング管理などに大きな効果を発揮する。 タイムラインの構築なども可能。
主な使用用途
WEBアプリのセッション、RDBアクセスのキャッシュ、 ゲームのランキングデータ、IoTデータの一時保存先など
redisのpub/sub機能
publish:発行 subscribe:購読
チャンネルへ誰かがメッセージなどを発行するとそのチャンネルを 購読している人に通知が送られる、というイメージ
(redis-cli上の場合)
>SUB (チャンネル名) で購読状態に
>PUB (チャンネル名) (”発行内容”) で該当チャンネルを購読状態になっている人に発行内容を通知
javaで実装する場合はjedisと連携
jedis.publish(チャンネル名,メッセージ)
jedis.subscribe(変数,チャンネル名)
で対応
受信時(sub)は3つの要素で帰ってくる
1つ目の要素によって後の要素の意味が異なる
‘subscribe’ : チャネルの購読に成功したことを意味します。チャネル名は応答の 2 つめの要素で与えられます。3 つめの要素は現在購読中のチャネル数を表します。
‘unsubscribe’: チャネルの購読停止に成功したことを意味します。 チャネル名は応答の 2 つめの要素で与えられます。3 つめの要素は現在購読中のチャネル数を表します。最後の要素が 0 なら、もういずれのチャネルも購読しておらず、Pub/Sub 状態を抜けているため、クライアントは任意の Redis コマンドを発行できます。
‘message’: 他のクライアントが発行した PUBLISH コマンドにより生成されたメッセージを受信したことを意味します 。2 つめの要素は受信元のチャネル名、3 つめの要素は実際のメッセージペイロードです。
pub/subはどのキースペース、 データベース番号とも関わっていない独立したポジションにある。
いろいろなものに使えすぎてどこまで学べばいいのかわからんぞ