2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

はじめに

Redisに最後に触れたのが結構前なので、
自身の備忘録をかねてRedisの環境構築、また動作について改めて確認してみました。

拙い文章ですが、どなたかの助けになれば幸いです。

前提環境環境

  • MacOS Catalina
  • Docker
  • Homebrew

Redisとは

いわゆるNoSQLの一つです。
RDBと比べても高速に動作し、構造化、準構造化、非構造化データを問わず、あらゆるタイプのデータを、
事前定義のスキーマに頼るRDBよりも容易に扱うことができます。
事前定義に左右されないため、柔軟なデータ構造を保持可能です。
また、分散処理にも適しています。

NoSQLの参考: https://aws.amazon.com/jp/nosql/

主なユースケース

I/O共に高速に動作するために、 主に下記用途で使われるケースが多いのではと思います。

  • キャッシュ用途
  • リアルタイムランキング集計
  • 大量メッセージ送信のQueue

データ保持形式

いわゆるKVS(Key-Value Store)の形式でデータを保持します。
KVSはKeyとValueを組み合わせる単純な構造からなるデータストアです。
Keyを指定すると対となるValueが返却されるものになります。
Redisは下記5つのデータ型を使用可能です。

  • String型
  • List型
  • Set型
  • SortedSet型
  • Hash型

環境構築について

Dockerで構築するのがお手軽なので、下記コマンドでRedisのコンテナを起動します。

Redisコンテナの起動

docker run --name redis -d -p 6379:6379 redis redis-server --appendonly yes

起動確認

無事に起動しています。

% docker ps -a
CONTAINER ID        IMAGE        COMMAND                  CREATED             STATUS              PORTS                                NAMES
XXXXXXXXXXXX        redis        "docker-entrypoint.s…"   5 seconds ago       Up 4 seconds        0.0.0.0:6379->6379/tcp               redis

ホストPCへのインストール

コンテナのRedisに接続するために、ホストへもRedisをインストールします。
ここでは Homebrew を使用してインストールしています。

% brew install redis

接続確認

下記コマンドで接続します。

% redis-cli
127.0.0.1:6379>

無事に接続できました。

各型の挙動確認

各型について軽く挙動を確認しましたが、それぞれの詳細なコマンドや型の説明は、下記リファレンスが参考になります。
datatypes

String型

String型はバイナリセーフで、どんな種類のデータも保持できます。
画像やシリアライズされたオブジェクト等も保持可能です。

値の設定

127.0.0.1:6379> set name inagacky
OK

値の取得

127.0.0.1:6379> get name
"inagacky"

List型

String型のリストです。

値の設定

LPUSH コマンドでは新しい要素をリストの先頭に追加、 RPUSH では新しい要素を末尾に追加します。

127.0.0.1:6379> lpush sampleList hogehoge
(integer) 1
127.0.0.1:6379> rpush sampleList fugafuga
(integer) 2

値の取得

lindex コマンドでは、インデックスを指定して値を取得します。

127.0.0.1:6379> lindex sampleList 0
"hogehoge"
127.0.0.1:6379> lindex sampleList 1
"fugafuga"

Set型

Set型ではメンバの重複を許可しないという性質があります。
そのため、下記の例では member1 を2回追加していますが、
Setには一つしか格納されていません。

値の設定

127.0.0.1:6379> sadd test_set member1
(integer) 1
127.0.0.1:6379> sadd test_set member2
(integer) 1
127.0.0.1:6379> sadd test_set member3
(integer) 1
127.0.0.1:6379> sadd test_set member1
(integer) 0

値の取得

127.0.0.1:6379> smembers test_set
1) "member3"
2) "member2"
3) "member1"

SortedSet型

Set型と似ていますが、すべてのメンバに対してスコアを指定する必要があります。
そのスコアを用いて、メンバ情報を並べ替えてくれます。

値の設定

127.0.0.1:6379> zadd sort_set 1 member1
(integer) 1
127.0.0.1:6379> zadd sort_set 2 member3
(integer) 1
127.0.0.1:6379> zadd sort_set 3 member2
(integer) 1

値の取得

127.0.0.1:6379> ZRANGE sort_set 0 2
1) "member1"
2) "member3"
3) "member2"

Hash型

Hash型は、フィールドと値のマップです。
オブジェクト構造を表現することができます。
下記の例では、 member1 として taro の情報、
member2 として hanako の情報を格納しています。

値の設定

127.0.0.1:6379> hset member1 name taro
(integer) 1
127.0.0.1:6379> hset member1 age 20
(integer) 1
127.0.0.1:6379> hset member1 gender male
(integer) 1
127.0.0.1:6379> hset member2 name hanako
(integer) 1
127.0.0.1:6379> hset member2 age 21
(integer) 1
127.0.0.1:6379> hset member2 gender female
(integer) 0

値の取得

127.0.0.1:6379> hget member1 name
"taro"
127.0.0.1:6379> hget member2 name
"hanako"
127.0.0.1:6379> hkeys member1 # キー情報の取得
1) "name"
2) "age"
3) "gender"
127.0.0.1:6379> hvals member1 # バリューの取得
1) "taro"
2) "20"
3) "female"
127.0.0.1:6379> hGetAll member1 # キーに対するハッシュ値全て取得。
1) "name"
2) "taro"
3) "age"
4) "20"
5) "gender"
6) "male"

SDK

各言語ごとのSDKについては、下記にまとめられています。
https://redis.io/clients

最後に

redisは非常にシンプルですし、様々な用途があるかと思います。
必要に応じて採用し、しっかりと使いこなしていきたいものです。
読んで頂きありがとうございます!

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?