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スクリプトを使用することで、ロックの取得と解放をアトミックに行うことができます。