Redis のインストールと活用ガイド(Windows 上)

概要

Redis は本来 Linux 向けのソフトウェアであり、公式には Windows 版が提供されていない。Windows で使う場合は、Windows Subsystem for Linux(WSL)で Linux 版 Redis を動かすか、Redis 互換の Windows ネイティブ実装 Memurai(メムライ)を使うのが現実的である。本ページでは Memurai を用いる方法を中心に、コマンドラインと Python からの基本操作を説明する。

目次

関連する外部ページ

Memurai 公式:https://www.memurai.com/
Redis 公式コマンドリファレンス:https://redis.io/commands

【サイト内の関連ページ】

Redis 活用ガイド

2. Redis 互換サーバの導入(Windows 上)

かつて公開されていた MicrosoftArchive の Redis(Redis-x64-3.x)は保守が終了した古い版であり、現在は推奨されない。現行では、Redis 互換の Windows ネイティブ実装である Memurai を用いるのが確実である(一次情報:Memurai 公式)。
  1. Memurai 公式サイト(https://www.memurai.com/get-memurai)からインストーラをダウンロードする。
  2. ダウンロードしたインストーラを実行し、ウィザードの指示に従って導入する。
  3. 導入後、Memurai は Windows サービスとして登録され、サービスとして起動する。サービスの稼働は「サービス」画面で確認できる。
Memurai は Redis 互換であり、クライアントツール名は memurai-cli、サーバ実行ファイルは memurai.exe である。以降のコマンド例では redis-cli の代わりに memurai-cli を用いる(Redis のコマンド構文はそのまま使える)。

3. コマンドラインによる基本操作

コマンドラインクライアントは、インストール先フォルダの memurai-cli.exe を実行するか、コマンドプロンプトで次を実行する。

memurai-cli

キーバリュー操作の例

set x 100
get x
set "p1" "product name=kaneko, price=120, qty=20"
get p1

リスト操作の例

lpush mylist apple
lpush mylist orange
lpush mylist car
lrange mylist 0 -1

集合操作の例

sadd myset a1
sadd myset b2
sadd myset c3
smembers myset
scard myset

4. Python による基本操作

Redis を操作する公式ライブラリ redis-py を導入する。管理者権限コマンドプロンプトを起動する (手順:Windowsキーまたはスタートメニュー → cmd と入力 → 右クリック → 「管理者として実行」)。

pip install -U --no-user redis

接続には redis.Redis クラスを使う。既定では取得結果がバイト列で返るため、文字列として扱うには decode_responses=True を指定する(一次情報:redis-py 公式(PyPI))。Memurai は既定でポート 6379 で待ち受けるため、接続先は Linux 版 Redis と同じである。

キーバリューストアの例

import redis
r = redis.Redis(host='localhost', port=6379, db=0, decode_responses=True)
r.set("x", 100)
print( r.get("x") )
r.set("p1", "product name=kaneko, price=120, qty=20")
print( r.get("p1") )

リスト操作の例

import redis
r = redis.Redis(host='localhost', port=6379, db=0, decode_responses=True)
r.lpush( "plist", "apple" )
r.lpush( "plist", "orange" )
r.lpush( "plist", "car" )
print( r.lrange( "plist", 0, -1 ) )

集合操作の例

import redis
r = redis.Redis(host='localhost', port=6379, db=0, decode_responses=True)
r.sadd( "pset", "a1" )
r.sadd( "pset", "b2" )
r.sadd( "pset", "c3" )
print( r.smembers( "pset" ) )
print( r.scard( "pset" ) )