HapInS Developers Blog

HapInSが提供するエンジニアリングの情報サイト

Redisを使用してみた

Redis

はじめに

最近目にすることがあるRedisが少し気になったので、使用してみようと思います。 RedisはNoSQLの1つで、キー・バリューデータストアに分類されるものです。 NoSQLとは、Not Only SQLの略で、非リレーショナルなデータベースのことを指します。

以前執筆した「グラフデータベースNeo4jを使用してみた」の「グラフデータベース」もNoSQLの1つでしたね。

あいにく、どちらも業務ではご縁がございませんが、今後のために、ちょっとだけかじっておこうと思います。

Redisとは

Redisは、先述の通り、キー・バリューストア(KVS)型のNoSQLです。

IT用語辞典 e-Wordsによると

KVS(Key-Value Store)とは、データ管理システムの種類の一つで、保存したいデータ(value:値)に対し、対応する一意の標識(key:キー)を設定し、これらをペアで格納する方式。

だそうです。

また、同じキー・バリューストア型としては、AmazonのDynamoDBがありますね。

インストールおよび起動と停止

こちら(Install Redis on macOS | Redis)を参考にインストールしていきます。

Homebrewを使用してインストールしますので、まずはHomebrewがインストールされていることを確認します。(インストールしてますが、念のため)

brew --version

Homebrewがインストールされてるのを確認できたら、以下をコマンドを実行してRedisをインストールします。

brew install redis

特に問題もなくインストールが完了しましたので、起動していきます。

redis-server

Ctrl-Cで停止します。

28465:signal-handler (1709623809) Received SIGINT scheduling shutdown...
28465:M 05 Mar 2024 16:30:09.256 * User requested shutdown...
28465:M 05 Mar 2024 16:30:09.256 * Saving the final RDB snapshot before exiting.
28465:M 05 Mar 2024 16:30:09.280 * DB saved on disk
28465:M 05 Mar 2024 16:30:09.280 # Redis is now ready to exit, bye bye...

また、Redis をフォアグラウンドで実行する代わりに、launchdバックグラウンドでプロセスを開始することもできます。

brew services start redis

以下コマンドで起動の確認ができます。

brew services info redis
redis (homebrew.mxcl.redis)
Running: ✔
Loaded: ✔
Schedulable: ✘
User: XXXX
PID: 15213

停止する場合は以下コマンドを実行します。

brew services stop redis

コマンド実行

redis-cliを使用して、コマンドを試してみます。

redis-cli
127.0.0.1:6379>

Redisに接続できました。

接続できなかった場合は、以下のメッセージが表示されます。 これは、Ctrl-Cで終了できます。

Could not connect to Redis at 127.0.0.1:6379: Connection refused
not connected>

では、Commands | Redisを参考に、コマンド実行していきます。

まずは「SET」で、キーとバリューを設定してみます。

127.0.0.1:6379> SET testkey1 "testvalue1"
OK

設定したので、「GET」で確認してみます。

GET testkey1
"testvalue1"

インクリメントを試してみます。

127.0.0.1:6379> SET testcount1 0
OK
127.0.0.1:6379> GET testcount1
"0"
127.0.0.1:6379> INCR testcount1
(integer) 1
127.0.0.1:6379> GET testcount1
"1"

削除してみます。

127.0.0.1:6379> GET testkey1
"testvalue1"
127.0.0.1:6379> DEL testkey1
(integer) 1
127.0.0.1:6379> GET testkey1
(nil)

複数のキーを設定後、キーを取得してみます。

127.0.0.1:6379> SET testkey1 "testvalue1"
OK
127.0.0.1:6379> SET testkey2 "testvalue2"
OK
127.0.0.1:6379> SET samplekey1 "samplevalue1"
OK
127.0.0.1:6379> SET samplrkey2 "samplevalue2"
OK
127.0.0.1:6379> KEYS *
1) "testkey1"
2) "testkey2"
3) "samplekey1"
4) "testcount1"
5) "samplrkey2"
127.0.0.1:6379> KEYS test*
1) "testkey1"
2) "testkey2"
3) "testcount1"

Sorted setを試してみます。 Sorted setは、Redisについて調べているとよく見かけるデータ型です。

関連するスコアで順序付けられた一意の文字列(メンバー)のコレクションで、ランキングを作成するときに使用したりします。

まずは、データをSorted setに追加していきます。

127.0.0.1:6379> ZADD testsortedkey 100 member1
(integer) 1
127.0.0.1:6379> ZADD testsortedkey 90 member2
(integer) 1
127.0.0.1:6379> ZADD testsortedkey 55 member3
(integer) 1
127.0.0.1:6379> ZADD testsortedkey 65 member4
(integer) 1
127.0.0.1:6379> ZADD testsortedkey 78 member5
(integer) 1

登録された要素数を確認します。

127.0.0.1:6379> ZCARD testsortedkey
(integer) 5

member4のランク(scoreの昇順)を確認します。

127.0.0.1:6379> ZRANK testsortedkey member4
(integer) 1

member4のランク(scoreの降順)を確認します。

127.0.0.1:6379> ZREVRANK testsortedkey member4
(integer) 3

ZRANGEで指定した範囲の要素を取得します。 0は最初の要素、-1は最後の要素 オプションのWITHSCORESでスコアを取得 REVでscoreの降順となります。

127.0.0.1:6379> ZRANGE testsortedkey 0 -1 WITHSCORES REV
 1) "member1"
 2) "100"
 3) "member2"
 4) "90"
 5) "member5"
 6) "78"
 7) "member4"
 8) "65"
 9) "member3"
10) "55"

以下、いろいろ変更して試してみます。

127.0.0.1:6379> ZRANGE testsortedkey -3 -1 WITHSCORES REV
1) "member5"
2) "78"
3) "member4"
4) "65"
5) "member3"
6) "55"

スコア範囲を指定

127.0.0.1:6379> ZRANGE testsortedkey 65 90 BYSCORE WITHSCORES
1) "member4"
2) "65"
3) "member5"
4) "78"
5) "member2"
6) "90"

score範囲の前に「(」をつけた場合は、その値は含みません。

127.0.0.1:6379> ZRANGE testsortedkey (65 (90 BYSCORE WITHSCORES
1) "member5"
2) "78"

score範囲の最大最小を知らなくても大丈夫です。

127.0.0.1:6379> ZRANGE testsortedkey -inf +inf BYSCORE WITHSCORES
 1) "member3"
 2) "55"
 3) "member4"
 4) "65"
 5) "member5"
 6) "78"
 7) "member2"
 8) "90"
 9) "member1"
10) "100"
127.0.0.1:6379> ZRANGE testsortedkey (55 +inf BYSCORE LIMIT 1 2 WITHSCORES
1) "member5"
2) "78"
3) "member2"
4) "90"

終わりに

導入からコマンド実行までサクサクっと進めることができましたので、いろいろなコマンドを試してみたくなっちゃいますね。 皆様も機会があればぜひ、お試しください。