キーバリューデータベースシステム Redis のインストールと基本操作,Python からの使用(ソースコードを使用)(Ubuntu 上)

Redis は,インメモリ・データストアである.文字列,リスト,集合,ハッシュ,ソート済み集合,ストリームなどのデータ型を扱う機能を持つ.

このページでは,GitHub の公式リポジトリからソースコードを取得し,Redis 本体(コア)をビルドして使用する手順を示す.2026年8月時点の最新の安定版系列は Redis Open Source 8.10 である(7.0 系列はサポート終了)。バージョン 8.0 以降は RSALv2/SSPLv1/AGPLv3 のトライライセンスである。

サイト内の関連ページ

前準備

Ubuntu のシステム更新

Ubuntu で OS のシステム更新を行うときは, 端末で,次のコマンドを実行する.

Ubuntu で OS のシステム更新を行うときは, 端末で,次のコマンドを実行する。これは、パッケージ情報を最新の状態に保ち、インストール済みのパッケージをセキュリティアップデートやバグ修正を含めて更新するためである。

Ubuntu のインストールはこちらの別ページで説明する。
# パッケージリストの情報を更新
sudo apt update
# インストール済みのパッケージを包括的に更新 (依存関係も考慮)
sudo apt full-upgrade
# カーネル更新等で実際に再起動が必要な場合のみ実行を推奨
# sudo shutdown -r now

C/C++ コンパイラと Make とビルドツールのインストール

ソフトウェアをソースコードからビルドするには、C/C++コンパイラ (通常はGCC) や make ユーティリティといった開発ツールが必要である。Ubuntuでは、これらのツールは build-essential パッケージにまとめられている。インストールするには,端末で,次のコマンドを実行する。

sudo apt -y install build-essential libtool texinfo dpkg-dev pkg-config

libtool, texinfo, dpkg-dev, pkg-config は、より複雑なビルドやパッケージ管理の際に役立つ開発関連ツールである。

Git のインストール

端末で,次のコマンドを実行する.

# パッケージリストの情報を更新
sudo apt update
sudo apt -y install git

テスト実行用ソフトウェアのインストール

Redis の make testtcl で記述されたテストスクリプトを使用する。端末で,次のコマンドを実行する。

sudo apt -y install tcl

インストール

  1. ソースコードの入手
    cd /usr/local
    sudo rm -rf redis
    sudo git clone https://github.com/redis/redis.git
    sudo chown -R $USER redis
    

    最新の安定版を指定して取得するときは,バージョンのタグを指定する(例:8.10.0)。

    cd /usr/local/redis
    git checkout 8.10.0
    
  2. ビルド
    cd /usr/local/redis
    make
    

    モジュール(JSON, 時系列, Bloom フィルタ, Query Engine など)のソースコードを取得していない状態では,Redis 本体(コア)のみがビルドされる。モジュールを含めてビルドする場合は make modules-update でモジュールを取得した後にビルドするが,LLVM,CMake(3.25 以上 3.31.6 以下),Rust などのバージョンに依存した追加の前提ソフトウェアが必要になる(make bootstrap list で不足しているものを確認できる)。

  3. 結果の確認

    エラーメッセージが出ていないこと

  4. テスト
    make test
    
  5. 結果の確認

    エラーメッセージが出ていないこと

  6. インストール

    make install により,実行ファイル(redis-server, redis-cli など)が /usr/local/bin にインストールされる。

    sudo make install
    
  7. 結果の確認

    エラーメッセージが出ていないこと,および,バージョンが表示されること

    redis-server --version
    
  8. カーネルパラメータの設定

    Redis はデータをディスクに保存する際に子プロセスを生成する。このとき,Linux カーネルのメモリオーバーコミットが無効であると保存に失敗することがあるため,vm.overcommit_memory を 1 に設定する。また,Transparent Huge Pages (THP) が有効であると,遅延やメモリ使用量の増加が発生するため無効にする。設定は,端末で,次のコマンドを実行する。

    # メモリオーバーコミットの有効化(再起動後も有効にする設定を含む)
    sudo sysctl vm.overcommit_memory=1
    echo "vm.overcommit_memory = 1" | sudo tee -a /etc/sysctl.conf
    
    # Transparent Huge Pages の無効化(次回起動時までの設定)
    echo never | sudo tee /sys/kernel/mm/transparent_hugepage/enabled
    

Redis を使ってみる

  1. 試しに,サーバを起動してみる

    サーバの起動は /usr/local/bin/redis-server コマンドで行う.設定ファイルを指定しない場合は既定の設定(ポート 6379)で起動する.終了は Ctrl + C で行う.

    
    /usr/local/bin/redis-server
    
  2. 試しに,Redis コマンドラインクライアントを起動してみる

    サーバを起動した端末とは別の端末を開き,次のコマンドを実行する.

    
    redis-cli
    
  3. key-value ストアの例

    
    set x 100
    get x
    set "p1" "\"#<struct Struct::Product name=\\\"kaneko\\\", price=120, qty=20>\""
    get p1
    
  4. リスト操作の例

    
    lpush mylist apple
    lpush mylist orange
    lpush mylist car
    lrange mylist 0 -1
    
  5. 集合操作の例

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

Python で Redis を使ってみる

  1. 前準備として python3-redis をインストール

    端末で,次のコマンドを実行する.

    sudo apt -y install python3-redis
    
  2. key-value ストアの例

    接続には redis.Redis を使用する(旧来の StrictRedis は現在の redis-py では Redis の別名である)。decode_responses=True を指定すると,取得した値がバイト列ではなく文字列になる。

    
    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", "\"#<struct Struct::Product name=\\\"kaneko\\\", price=120, qty=20>\"")
    print( r.get("p1") )
    
  3. リスト操作の例

    
    import redis
    r = redis.Redis(host='localhost', port=6379, db=0, decode_responses=True)
    r.lpush( "mylist", "apple" )
    r.lpush( "mylist", "orange" )
    r.lpush( "mylist", "car" )
    print( r.lrange( "mylist", 0, -1 ) )
    
  4. 集合操作の例

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