Redisの基礎と実践

Redisのインストールと設定

CentOS 7環境でのRedisインストール手順を示します。

ダウンロード

公式サイトから最新版のRedisを取得します。ここではredis-7.2.4.tar.gzを使用します。

解凍

圧縮ファイルを/optディレクトリにコピーし、解凍します。


tar -zxvf redis-7.2.4.tar.gz
mv redis-7.2.4 redis

ビルド環境の準備

必要なビルドツールがインストールされていない場合は、以下のコマンドで追加します。


yum -y install gcc automake autoconf libtool make

コンパイルとインストール

解凍したディレクトリに移動し、makeコマンドでコンパイルを行います。


cd /opt/redis
make
make install

設定ファイルのバックアップ

オリジナルの設定ファイルを安全な場所にコピーしておきます。


cp /opt/redis/redis.conf /opt/myredis

主要な設定変更

以下のように設定ファイルを編集します。


bind 0.0.0.0
protected-mode no
daemonize yes

Redisトランザクション

トランザクションの基本

Redisのトランザクションは、すべてのコマンドをシーケンス化して実行します。

トランザクションコマンド

  • MULTI: トランザクション開始
  • EXEC: 登録されたコマンドの実行
  • DISCARD: キューされたコマンドを破棄

コード例


127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> SET key1 value1
QUEUED
127.0.0.1:6379> EXEC
1) OK

秒殺システムの実装

Webアプリケーション構築

Javaベースのウェブアプリケーションを作成し、Redisを利用して秒殺機能を実装します。

主なクラス

JedisPoolUtilクラスでRedis接続プールを管理します。


public class JedisPoolUtil {
    private static volatile JedisPool jedisPool = null;

    public static JedisPool getJedisPoolInstance() {
        if (jedisPool == null) {
            synchronized (JedisPoolUtil.class) {
                if (jedisPool == null) {
                    jedisPool = new JedisPool("127.0.0.1", 6379);
                }
            }
        }
        return jedisPool;
    }
}

RDBとAOFの永続化

RDBの概要

RDBは定期的にデータセットのスナップショットをディスクに書き出します。

AOFの概要

AOFは各書き込み操作をログ形式で記録し、サーバー再起動時にログを読み込んでデータを復元します。

クラスタリング

クラスターの作成

複数のRedisノードを組み合わせてクラスターを作成します。


redis-cli --cluster create \
--cluster-replicas 1 \
node1-ip:port node2-ip:port ...

スロットの概念

Redisクラスターには16384個のスロットがあり、それぞれのキーは特定のスロットに割り当てられます。

分散ロック

基本的な実装

SETNXコマンドを使用してシンプルな分散ロックを実現します。


SETNX lock_key "value"
EXPIRE lock_key 10

改善策

Luaスクリプトを使用することで、ロックの取得と解放をアトミックに行うことができます。

タグ: redis Java DistributedLock

7月1日 16:56 投稿