お金をかけずにサーバーの勉強をしよう

Redisインストール

2025年5月16日

メニューへ戻る

こんばんは。

私、OSS界隈で人気のあるサーバープロダクトにどんなものがあるか知りたくて、よく dockerhubの explorerを見るんですね。

デフォルトだと「おすすめ順」に出てくるので、どんなのが人気があるか分かるのです。

見たことも聞いたこともないものでも結構☆が多かったりして「試しに味わってみるか」と導入してみることがよくあります。

そんなものの一つが、これ。
Redis

インメモリの KVS(Key Value Store)/NoSQLデータベース ってものなんですが、結構古くからあって、AWSと Azureでは Redisの SaaSがありますね。
(OCIにもあって、GCPは知りません)

私個人的には仕事では使いどころがなかった類のもので、強いて言うと WEBシステムのセッション情報を格納するキャッシュとして使えばレスポンスが良くなるくらいしか認識してませんでした。

でも、もしパブリッククラウドでセッション情報の格納を RDB系の DBaaSに任せた場合、どれくらいのレイテンシが出るか分からなかったので、その環境上でなら Redisを選択したかも知れません。

結局そういう機会には恵まれなかったので使わず終いでしたが、dockerhubでは上位常連のブツだっただけに気にはなっていたのでした。

こちらインストールも使い方も簡単そうなんで、いっちょここでインストールしてみます。


1.環境

以下の環境でやります。

Ubuntu Serverのインストールについては
Ubuntu 24.04 Server インストール」に書いています。


2.インストール

2025年5月16日は Redisが 8にメジャーバージョンアップしたばかり。

それで aptも snapも Ubuntuのパッケージリポジトリにはまだ無いだろうと思っていたら snapパッケージは既にありました。

snapのパッケージのインストールついては Redisの公式ドキュメントにも書かれていて、Ubuntuに限らず snap版への力の入れようが伺えます。

これまで snap版は後々何かと問題が出ることが多くて、サーバー運用としてはチョイ避けたいってのが本音なんですが、最近 Canonicalも頑張ってるし Redis自身が snapパッケージの作成に参加しているんならこの流れに乗った方が良いのかも知れないと思いました。

一応 apt版のインストールもしてみまして、そちらも特に問題は無かったんですが、このページでは snap版でやってみます。

以下がインストール手順で、サーバーが snap版でクライアントツール(redis-tools)は apt版って変な構成になっています。
Install Redis Open Source on Linux

それぞれパッケージのバージョンを調べてみました。

subro@UbuntuServer2404-1:~$ snap info redis
name:      redis
summary:   Redis is used as a database, cache and message broker.
publisher: Redis (redislabs)
store-url: https://snapcraft.io/redis
contact:   redis@redis.io
license:   BSD-3-Clause
description: |
  Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache
  and message broker. |
  It supports data structures such as strings, hashes, lists, sets, sorted sets with range queries,
  bitmaps, hyperloglogs, geospatial indexes with radius queries and streams. |
  Redis has built-in replication, Lua scripting, LRU eviction, transactions and different levels of
  on-disk persistence, and provides high availability via Redis Sentinel and automatic partitioning
  with Redis Cluster. |
  |
  Check out https://redis.io/ for more information.
snap-id: hHi3Iys64CUmQLvb3OG1cOfj7fyffvwD
channels:
  latest/stable:    8.0.1 2025-05-13 (1814) 15MB -
  latest/candidate: ↑
  latest/beta:      ↑
  latest/edge:      8.0.1 2025-05-15 (1818) 15MB -

Redisサーバーは 8.0.1でした。

次は redis-toolsです。

subro@UbuntuServer2404-1:~$ apt info redis-tools
Package: redis-tools
Version: 5:7.0.15 -1ubuntu0.24.04.1
Priority: optional
Section: universe/database
Source: redis
Origin: Ubuntu
Maintainer: Ubuntu Developers 
Original-Maintainer: Chris Lamb 
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 6,476 kB
Depends: adduser, libatomic1 (>= 4.8), libc6 (>= 2.38), libjemalloc2 (>= 3.5.0), liblzf1 (>= 1.5), libssl3t64 (>= 3.0.0), libsystemd0
Suggests: ruby-redis
Breaks: redis-server (<< 2:2.6.16-1)
Replaces: redis-server (<< 2:2.6.16-1)
Homepage: https://redis.io/
Download-Size: 1,166 kB
APT-Sources: http://jp.archive.ubuntu.com/ubuntu noble-updates/universe amd64 Packages
Description: Persistent key-value database with network interface (client)
 Redis は memcache のようなキーバリューデータベースですが、データセットは不 揮発性です。さらに Redis
 は、リストやセットといったデータ構造のアトミックな 操作や検索をネイティブにサポートします。
 .
 This package contains the command line client and other tools.

N: 追加レコードが 1 件あります。表示するには '-a' スイッチを付けてください。

こちらは 7.0.15でした。
(-aオプション付きでも実行しましたが同じ内容が2回出ただけでした)

では公式の手順の通りにコマンドを実行していきます。

aptパッケージの情報を最新にします。

subro@UbuntuServer2404-1:~$ sudo apt update
ヒット:1 http://security.ubuntu.com/ubuntu noble-security InRelease
ヒット:2 http://jp.archive.ubuntu.com/ubuntu noble InRelease
ヒット:3 http://jp.archive.ubuntu.com/ubuntu noble-updates InRelease
ヒット:4 http://jp.archive.ubuntu.com/ubuntu noble-backports InRelease
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
状態情報を読み取っています... 完了
アップグレードできるパッケージが 1 個あります。表示するには 'apt list --upgradable' を実行してください。

redis-toolsのインストールです。

subro@UbuntuServer2404-1:~$ udo apt install -y redis-tools
〜〜〜 省略 〜〜〜

インストールできました。

Redisサーバーのインストールです。

subro@UbuntuServer2404-1:~$ sudo snap install redis
redis 8.0.1 from Redis (redislabs) installed

難なくインストールできました。


3.動作確認(ローカル)

公式手順の最後にローカルでの動作確認があるのでやってみます。
Redisのクライアントツールである redis-cliコマンドを実行していますね。

subro@UbuntuServer2404-1:~$ redis-cli
127.0.0.1:6379> PING
PONG

127.0.0.1:6379> exit

PINGと入れて PONGとくる。
上手く動いているようです。


4.外部ノードからの利用(その1)

サーバーですからね、ローカルだけじゃなくて他のノードからも繋いでみましょう。

しかし Redisサーバーはデフォルトだと [127.0.0.1]にバインドされていて、外部からアクセスできるようになっていません。

subro@UbuntuServer2404-1:~$ sudo ss -antp | grep redis
LISTEN 0      511                 127.0.0.1:6379                0.0.0.0:*     users:(("redis-server",pid=3600,fd=18))
LISTEN 0      511                     [::1]:6379                   [::]:*     users:(("redis-server",pid=3600,fd=19))

これを [0.0.0.0](IP-ALL) にバインドさせたいので、設定ファイルの [redis.conf] をイジりたい。

[/etc/redis] にあるはずだが…
(対象ディレクトリが root権限になってるので sudoを使います)

subro@UbuntuServer2404-1:~$ sudo ls -l /etc/redis
合計 0

ねンだな、これが。

[/etc/redis]ディレクトリは Redisサーバーか redis-toolsのインストールによって作られているようですけど、中身は空です。

snap版なら [/snap/redis/current]あたりかな?
( [/snap/redis/current]はシンボリックリンクなので lsコマンドのオプションにリンク先を出す -Lを使っています。)

subro@UbuntuServer2404-1:~$ ls -lL /snap/redis/current
合計 0
drwxr-xr-x 2 root root 33  5月 14 08:27 conf-dist
drwxr-xr-x 4 root root 56  5月 14 08:27 meta
drwxr-xr-x 3 root root 28  5月 14 08:27 snap
drwxr-xr-x 4 root root 37  5月 14 08:27 usr

[conf-dist]ディレクトリが怪しい。

subro@UbuntuServer2404-1:~$ ls -l /snap/redis/current/conf-dist
合計 120
-rw-r--r-- 1 root root 122608  5月 14 08:19 redis.conf

ありました。

では [/snap/redis/current/conf-dist/redis.conf]ファイルを編集しましょう!というと、これは snapのイメージのファイルであって ReadOnlyファイルシステムとなっており編集できません

snapで変更する必要のあるファイルは概ね [/var/snap]ディレクトリ以下にあり、
今回は [/var/snap/redis/common/etc/redis/redis.conf]ファイルが編集すべきファイルなのでした。

#bind 127.0.0.1 -::1
 ↓
bind 0.0.0.0 ← IPv6を使っていないので-::1は消してしまいました。

Redisサーバーを再起動します。
snap版だと systemdのサービスユニット名は [snap.redis.server.service]になります。

subro@UbuntuServer2404-1:~$ sudo systemctl restart snap.redis.server

バインドアドレスは [0.0.0.0]になってるでしょうか。

subro@UbuntuServer2404-1:~$ sudo ss -antp | grep redis
LISTEN 0      511                   0.0.0.0:6379                0.0.0.0:*     users:(("redis-server",pid=3913,fd=18))

なってるくさい。
IPv6のバインドも無くなってるし、良いのではないかと。

試しに私が普段使っているクライアントである Lubuntu 24.04に上と同じ要領で redis-toolsをインストールしました。

Lubuntuにて redisのコマンドラインツール「redis-cli」をば…。

subro@Lubuntu2404:~$ redis-cli -h UbuntuServer2404-1
UbuntuServer2404-1:6379>

ログインできていると思います。
ユーザー認証は無いのか…。

実際にデータを入れるテスト。

UbuntuServer2404-1:6379> set mykey somevalue  ← キーが[mykey]で値が[somevalue]の行を挿入しています。
以下、見やすいように改行しています。
(error) DENIED Redis is running in protected mode because protected mode is
        enabled and no password is set for the default user.
        In this mode connections are only accepted from the loopback interface.
        If you want to connect from external computers to Redis you may adopt
        one of the following solutions:

1) Just disable protected mode sending the command 'CONFIG SET protected-mode no'
   from the loopback interface by connecting to Redis from the same host
   the server is running, however MAKE SURE Redis is not publicly accessible
   from internet if you do so.
   Use CONFIG REWRITE to make this change permanent.

2) Alternatively you can just disable the protected mode by editing
   the Redis configuration file, and setting the protected mode option to 'no',
   and then restarting the server.

3) If you started the server manually just for testing, restart it with the
   '--protected-mode no' option.

4) Set up an authentication password for the default user.
   NOTE: You only need to do one of the above things in order for the server
         to start accepting connections from the outside.

「プロテクトモード」とやらになっており、外部ノードからのデータ操作が禁止されていました。

1)・2)・3)はプロテクトモードじゃなくする手法で、やるべきは 4) なんでしょうね。
ちゃんとパスワード付きユーザーを作れと。


5.ユーザー作成

Redisサーバーをインストールした Ubuntu Serverに戻っての作業になります。

ただプロテクトモードのままで外部から接続するにあたって、大前提として上のエラーメッセージの 4) に書かれている通り「default user」にパスワードを設定する必要があるようです。

「default user」のユーザー名は?と思ったら [default]ユーザーでした。

ユーザー作成等の作業は redis-cliコマンドを使い、内部で ACL SETUSERコマンドを使います。

redis-cliコマンドの内部コマンド ACL SETUSER のマニュアルはこちら。
ACL SETUSER

まず [default]ユーザーのパスワードを「AdminPassword」に設定しましょうか。

subro@UbuntuServer2404-1:~$ redis-cli
127.0.0.1:6379> ACL SETUSER default >AdminPassword
OK

設定できたっぽいです。

以下の内容で [subro]ユーザーを作ります。

ユーザー名subro
パスワードSubro38Manager
権限:全てのキーに対する設定と取得ができる(のだと思う)
127.0.0.1:6379> ACL SETUSER subro on allkeys +set + get >Subro38Manager
OK

できました。

ユーザーリストを出してみます。

127.0.0.1:6379> ACL LIST
1) "user default on sanitize-payload #4596xxxxxxxxxxxxd63e ~* &* +@all"
2) "user subro on sanitize-payload #d8d3xxxxxxxxxx0375 ~* resetchannels -@all +set"
OK

パスワードはハッシュ化されているんでしょう、そのままは表示されません。


6.外部ノードからの利用(その2)

再びクライアントの Lubuntuに戻ってきての作業です。

redis-cliコマンドを使って Redisサーバーに接続し、内部で AUTHコマンドを使ってインタラクティブにログインします。

UbuntuServer2404-1:6379> redis-cli -h UbuntuServer2404-1
UbuntuServer2404-1:6379> AUTH subro Subro38Manager
OK

エラーは出ませんね。
良さげです。

バッチ的にログインするなら
「redis-cli -h UbuntuServer2404-1 --user subro --pass Subro38Manager」と書けばできましたが、「コマンドラインに認証情報を書くのは危険」といった旨のメッセージが出ていました。

データを入れてから取り出してみましょう。

UbuntuServer2404-1:6379> set mykey somevalue  ← キーが[mykey]で値が[somevalue]の行を挿入しています。
OK
UbuntuServer2404-1:6379> get mykey
"somevalue"

両方ともできました。\(^o^)/


==========
Redisの前バージョンを snapパッケージで入れようとしたらライブラリ周りのエラーが出まくって頓挫したのですが、当バージョンではそれがなく何の問題もなく環境構築ができました。

Ubuntuの snap周りもちょっとずつ改善されているように感じましたね。

Redisはここでやったようなユーザー管理などの管理作業以外はコマンドラインで使うことはそんなにないと思われ、ここから先はプログラミング言語でデータを入れたり出したりする検証をするべきでしょうから環境構築はこの辺で終わりです。

AWSも Azureとも、Redisを KVSの DBというよりキャッシュという謳い文句のサービスにしているようです。
実際はそういう使い方が多いってことなんでしょうね。

その一方で高速な Redisを主データベースとして扱うことに可能性を見出している人たちもいるようです。


Redisの以前のバージョンはいささか設計が古かったらしく「Redisの25倍速い!」という触れ込みで Dragonfly っていうのがリリースされました。

Dragonflyは Linuxの新しいカーネルで使えるようになった I/O のシステムコールを使うことで実現できたのだとかいう話だったので、Redis Ver.8では其の辺への対応がされたのではないかと想います。
(詳しく調べていませんが)

Dragonflyにつき当ホームページでは「Dragonflyインストール(Redis互換)(前編)」にて扱っていますので、良ければご覧ください。

Redisと Memcachedと APIがコンパチらしいので、Redisを代替するか?と思っていたのですが、Redisのバージョンアップによって怪しくなってきたかも知れませんね。


Amazonで検索して出てくる日本語書籍は技術評論社より 2022年12月に出たこの本だけ。
新しいのが欲しいですよね。