1. それは何ですか?
マスターが更新されると、構成とポリシーに従ってスタンバイ マシンのマスター/スレーブ機構に自動的に同期され、マスターは主に書き込み用、スレーブは主に読み取り用になります。
2. 何ができますか?
- 読み取りと書き込みの分離、パフォーマンスの拡張、メインサーバーへの負荷の軽減
- ディザスタリカバリ、高速リカバリ、マスターがハングアップするとスレーブがマスターになります
3. マスター/スレーブ レプリケーション: 遊び方は?
3.1. 1 つのマスターと 2 つのスレーブの構成
次に、マスター 1 台とスレーブ 2 台の効果を設定しましょう。実際には 3 台のマシンが必要です。便宜上、1 台のマシンで説明し、異なるポートを通じてマシンを区別します。3 台のマシンの構成
役割 | ポート |
マスター | 6379 |
スレーブ1 (スレーブ) | 6380 |
スレーブ2 (スレーブ) | 6381 |
3.2、マスター/スレーブの構成
3.2.1. ケースワークディレクトリを作成します: マスター/スレーブ
以下のコマンドを実行して/opt/master-slaveディレクトリを作成し、今回の操作はすべてmaster-slaveディレクトリ内で行います。
ps -ef | grep redis | awk -F" " '{print $2;}' | xargs kill -9 # 方便演示,停止所有的redis
mkdir /opt/master-slave
cd /opt/master-slave/
3.2.2. redis.conf をマスター/スレーブディレクトリにコピーする
cp /opt/redis-6.2.1/redis.conf /opt/master-slave/
3.2.3. マスター設定ファイルの作成: redis-6379.conf
/opt/master-slave ディレクトリに redis-6379.conf ファイルを作成します。内容は次のとおりです。192.168.200.129 はテスト マシンの IP であることに注意してください。独自の IP に置き換える必要があります。
#redis.conf是redis原配置文件,内部包含了很多默认的配置,这里使用include将其引用,相当于把redis.conf内容直接贴进来了
include /opt/master-slave/redis.conf
daemonize yes
bind 192.168.200.129
#配置密码
requirepass 123456
dir /opt/master-slave/
logfile /opt/master-slave/6379.log
#端口
port 6379
#rdb文件
dbfilename dump_6379.rdb
#pid文件
pidfile /var/run/redis_6379.pid
3.2.4. スレーブ1の設定ファイルを作成します: redis-6380.conf
/opt/master-slave ディレクトリに redis-6380.conf ファイルを作成します。内容は次のとおりです。上記のマスターと同様に、次の 2 行が追加されています。
include /opt/master-slave/redis.conf
daemonize yes
bind 192.168.200.129
requirepass 123456
dir /opt/master-slave/
port 6380
dbfilename dump_6380.rdb
pidfile /var/run/redis_6380.pid
logfile /opt/master-slave/6380.log
#用来指定主机:slaveof 主机ip 端口
slaveof 192.168.200.129 6379
#主机的密码
masterauth 123456
3.2.5. スレーブ2の設定ファイルを作成します: redis-6381.conf
include /opt/master-slave/redis.conf
daemonize yes
bind 192.168.200.129
requirepass 123456
dir /opt/master-slave/
port 6381
dbfilename dump_6381.rdb
pidfile /var/run/redis_6381.pid
logfile /opt/master-slave/6381.log
#用来指定主机:slaveof 主机ip 端口
slaveof 192.168.200.129 6379
#主机的密码
masterauth 123456
3.2.6、マスターの起動
redis-server /opt/master-slave/redis-6379.conf
3.2.7、スレーブ1を開始します
redis-server /opt/master-slave/redis-6380.conf
3.2.8、スレーブ2を開始します
redis-server /opt/master-slave/redis-6381.conf
起動時にエラーが発生した場合は、構成を注意深く確認してください。また、ログを読み取ることもできます。ログは、3 つのマシンの起動時に /opt/master-slave ディレクトリに次のように生成されます。
3.2.9. ホスト情報の表示
次のように、redis-cli コマンドを使用してホストに接続します。
redis-cli -h 192.168.200.129 -p 6379 -a 123456
次のコマンドを使用してホスト情報を表示します
info Replication
3.2.10. スレーブ1の情報を確認する
次の 2 つのコマンドを使用して、スレーブ SLAVE1 の情報を照会します。
redis-cli -h 192.168.200.129 -p 6380 -a 123456
info Replication
3.2.11、slave2の情報も確認します
redis-cli -h 192.168.200.129 -p 6381 -a 123456
info Replication
3.2.12. マスター/スレーブ同期の効果を検証する
マスター上で以下の2つのコマンドを実行します。
192.168.200.129:6379> flushdb
OK
192.168.200.129:6379> set name ready
OK
192.168.200.129:6379> set age 30
OK
スレーブ1で次のコマンドを実行すると、データが同期されていることがわかります。
192.168.200.129:6380> mget name age
1) "ready"
2) "30"
192.168.200.129:6380>
これをスレーブ2でも実行すると、次のような効果が得られます。
192.168.200.129:6381> mget name age
1) "ready"
2) "30"
192.168.200.129:6381>
3.3. マスタースレーブレプリケーションの原理
- スレーブが起動し、マスターに正常に接続すると、データ同期メッセージをマスターに送信します (同期コマンドの送信)。
- マスターは、スレーブによって送信されたデータ同期メッセージを受信すると、マスター サーバーのデータを rdb ファイルに永続化し、同時にデータを変更するために受信したコマンドを収集し、マスターは rdb ファイルをスレーブに送信します。完全な同期を完了するには
- フルコピー: スレーブサービスは、マスターから送信された rdb ファイルを受信した後、それを保存し、メモリにロードします。
- 増分レプリケーション: マスターは、収集した変更コマンドを 1 つずつスレーブに渡し続けて、同期を完了します。
- ただし、マスターが再接続されている限り、完全同期 (フルコピー) が自動的に実行されます。
3.4 概要
3.4.1. メイン Redis がハングアップした後はどうなりますか? スレーブ機は上部にありますか、または静止していますか?
メインマシンがハングアップした後は、弟が回復するのを待ち、王位を奪うことはありません。
3.4.2. スレーブがハングアップして再開した後も、マスターからのデータの同期を継続しますか?
はい、再起動後、不足しているデータは引き続き同期されます。
3.4.3、情報レプリケーション: マスター/スレーブ レプリケーション情報の表示
上で説明したように、マスターとスレーブの両方を実行してマスターとスレーブの情報を表示できます。
4. 一般的に使用されるマスター/スレーブ構造
4.1、1 つのマスターと 2 つのスレーブ
上で示したのは 1 つのマスターと 2 つのスレーブですが、構成ファイルが使用されています。実際には、スレーブはコマンドによって構成できます。もう一度デモしてみましょう。誰もが楽観的です。
4.1.1. ケースワークディレクトリを作成します: マスター/スレーブ
以下のコマンドを実行して/opt/master-slaveディレクトリを作成し、今回の操作はすべてmaster-slaveディレクトリ内で行います。
ps -ef | grep redis | awk -F" " '{print $2;}' | xargs kill -9 # 方便演示,停止所有的redis
mkdir /opt/master-slave
cd /opt/master-slave/
4.1.2. redis.conf をマスター/スレーブディレクトリにコピーする
cp /opt/redis-6.2.1/redis.conf /opt/master-slave/
4.1.3. マスター設定ファイルの作成: redis-6379.conf
/opt/master-slave ディレクトリに redis-6379.conf ファイルを作成します。内容は次のとおりです。192.168.200.129 はテスト マシンの IP であることに注意してください。独自の IP に置き換える必要があります。
include /opt/master-slave/redis.conf
daemonize yes
bind 192.168.200.129
requirepass 123456
dir /opt/master-slave/
port 6379
dbfilename dump_6379.rdb
pidfile /var/run/redis_6379.pid
logfile /opt/master-slave/6379.log
4.1.4. スレーブ1の設定ファイルを作成します: redis-6380.conf
/opt/master-slave ディレクトリに redis-6380.conf ファイルを作成します。内容は次のとおりです。上記のマスターと同様に、6379 を 6380 に置き換えるだけです。
include /opt/master-slave/redis.conf
daemonize yes
bind 192.168.200.129
requirepass 123456
dir /opt/master-slave/
port 6380
dbfilename dump_6380.rdb
pidfile /var/run/redis_6380.pid
logfile /opt/master-slave/6380.log
4.1.5. スレーブ2の設定ファイルを作成します: redis-6381.conf
include /opt/master-slave/redis.conf
daemonize yes
bind 192.168.200.129
requirepass 123456
dir /opt/master-slave/
port 6381
dbfilename dump_6381.rdb
pidfile /var/run/redis_6381.pid
logfile /opt/master-slave/6381.log
4.1.6、マスターの起動
redis-server /opt/master-slave/redis-6379.conf
4.1.7、スレーブ1の開始
redis-server /opt/master-slave/redis-6380.conf
4.1.8、スレーブ2の起動
redis-server /opt/master-slave/redis-6381.conf
4.1.9. 3台のマシンにそれぞれログインしてマスター/スレーブ情報を確認する
今回は、slave1とslave2の設定ファイルにslaveofコマンドによるマスター/スレーブ情報の設定を行っていないため、現在の3台のマシンの役割はマスターになります。
次のように、3 つの Redis にそれぞれログインし、info replication コマンドを使用して次の 3 つのマスター/スレーブ情報を表示します。
以下では、コンソールコマンドを使用して、slave1とslave2をマスタースレーブライブラリとして指定します。
4.1.10. スレーブ1をマスターのスレーブライブラリとして設定する
次のコマンドを実行してslave1に接続します。
redis-cli -h 192.168.200.129 -p 6380 -a 123456
次のコマンドを実行してマスターパスワードを設定します
マスターにはパスワードが必要なため、スレーブ1にマスターのパスワードを指定しないとデータの同期ができません。
config set masterauth 123456
次のコマンドを実行して、slave1をマスターのスレーブとして指定します。
slaveof 192.168.200.129 6379
次のように、情報レプリケーションを使用して、slave1 のマスター/スレーブ情報を表示します。
4.1.11. スレーブ1をマスターのスレーブライブラリとして設定する
次のコマンドを実行してスレーブ2に接続します
redis-cli -h 192.168.200.129 -p 6381 -a 123456
次のコマンドを実行してマスターパスワードを設定します
マスターにはパスワードが必要なため、スレーブ2にマスターのパスワードを指定しないとデータの同期ができません。
config set masterauth 123456
次のコマンドを実行して、slave2をマスターのスレーブとして指定します。
slaveof 192.168.200.129 6379
次のように、情報レプリケーションを使用して、slave2 のマスター/スレーブ情報を表示します。
4.1.12、マスターのマスタースレーブ情報を見てみましょう
[root@service ~]# redis-cli -h 192.168.200.129 -p 6379 -a 123456
192.168.200.129:6379> info replication
注意: slaveofコマンドでマスタ・スレーブ方式を指定した場合、スレーブ再起動後はマスタ・スレーブ構成が無効になるため、再起動後にスレーブ側でslaveofコマンドを再設定する必要があります。これ。
途中でslaveofにより変更方向が変更された場合、ローカルデータはクリアされ、新しいマスターからデータが再同期されます。
4.2 聖火の引き渡し
マスターに多数のスレーブが接続されている場合、マスターは負荷がかかります。実際には、次の図に示すように、スレーブをスレーブに接続することもできます。構成はここでは実証されていませんが、構成は次のとおりです。その上。
4.3、反顧客志向
マスターが電話を切ると、スレーブの 1 つをマスターとして選択できます。
たとえば、slave1 をホストにしたい場合は、slave1 で次のコマンドを実行できます。
slaveof no one
この時点で、slave1 がホストになり、他のスレーブに移動して、slaveof コマンドを実行して、slave1 をハングさせます。
この種のアクティブ/スタンバイ切り替えには欠点があります。操作するには手動でコマンドを実行する必要があり、あまり便利ではありません。
別の方法を紹介します。センチネル モードでは、マスターがハングアップした後、スレーブの 1 つが自動的にマスターとして選択され、フェイルオーバーが自動的に実現されます。
5.センチネルモード
5.1. センチネルモードとは何ですか?
対顧客ベースの自動バージョンでは、マスターの障害を自動的に監視でき、障害が発生した場合、投票数に応じてスレーブの 1 つがマスターとして選択され、他のスレーブは自動的に新しいマスターに切り替わります。同期のために障害の自動回避を実現します。
5.2. 原則
Sentinel は、指定された頻度に従ってマスターに ping リクエストを送信し、マスターがまだ生きているかどうかを確認します。指定された時間内にマスターが Sentinel によって送信された ping リクエストに応答しない場合、sentinel はマスターが死んだとみなします。しかし、この状況では判断ミスが考えられます。たとえば、マスターはダウンしていませんが、センチネルとマスター間のネットワークが接続されていないため、ping が失敗する可能性があります。
誤った判断を避けるために、通常は複数のセンチネルが開始されます (通常は 3 などの奇数)。その後、マスターがダウンしていると考えるセンチネルが複数ある場合に、マスターが実際にダウンしていると判断するように指定できます。この値をセンチネルの半分に設定します。たとえば、センチネルの数が 3 の場合、この量を 2 に設定できます。
複数のセンチネルが判定され、マスターが実際に停止していると判断された場合、センチネルはフェイルオーバーを実行します。サーバーはスレーブから投票され、新しいマスター サーバーにアップグレードされ、マスター サーバーのスレーブに失敗した他のスレーブ サーバーがスレーブから除外されます。新しいマスターサーバーを指します。クライアントが障害が発生したマスターサーバーに接続しようとすると、クラスターは新しいマスターサーバーのアドレスもクライアントに返すため、クラスターは新しいマスターサーバーを使用して障害が発生したサーバーを置き換えることができます。 。
5.3 遊び方は?
5.3.1. 要件: 1 つのマスター、2 つのスレーブ、3 つのセントリーを設定する
次に、マスター 1 台、スレーブ 2 台、センチネル 3 台の構成を実現します。スレーブがハングアップした場合、フェールオーバー前にマスターがハングアップしたと判断するには、少なくとも 2 人のセンチネルが必要です。
便宜上、1 台のマシンでシミュレーションします。私のマシンの IP は 192.168.200.129、6 つの異なるノード (1 マスター、2 スレーブ、3 センチネル) はポートによって区別され、ノード構成情報は次のとおりです。
5.3.2. ケースワークディレクトリの作成: Sentinel
以下のコマンドを実行して/opt/sentinelディレクトリを作成し、今回の操作は全てsentinelディレクトリ内で行います。
# 方便演示,停止所有的redis
ps -ef | grep redis | awk -F" " '{print $2;}' | xargs kill -9
mkdir /opt/sentinel
cd /opt/sentinel/
5.3.3. redis.conf を Sentinel ディレクトリにコピーする
redis.conf はデフォルトの redis 構成ファイルです
cp /opt/redis-6.2.1/redis.conf /opt/sentinel/
5.3.4. マスター設定ファイルの作成: redis-6379.conf
/opt/sentinel ディレクトリに redis-6379.conf ファイルを作成します。内容は次のとおりです。192.168.200.129 はテスト マシンの IP であることに注意してください。独自の IP に置き換える必要があります。
include /opt/sentinel/redis.conf
daemonize yes
bind 192.168.200.129
dir /opt/sentinel/
port 6379
dbfilename dump_6379.rdb
pidfile /var/run/redis_6379.pid
logfile "./6379.log"
5.3.5. スレーブ1の設定ファイルを作成します: redis-6380.conf
/opt/sentinel ディレクトリに redis-6380.conf ファイルを作成します。内容は次のとおりです。上記のマスターと同様に、6379 を 6380 に置き換えるだけです。
include /opt/sentinel/redis.conf
daemonize yes
bind 192.168.200.129
dir /opt/sentinel/
port 6380
dbfilename dump_6380.rdb
pidfile /var/run/redis_6380.pid
logfile "./6380.log"
5.3.6. スレーブ2の設定ファイルを作成します: redis-6381.conf
/opt/sentinel ディレクトリに次の内容の redis-6381.conf ファイルを作成します。
include /opt/sentinel/redis.conf
daemonize yes
bind 192.168.200.129
dir /opt/sentinel/
port 6381
dbfilename dump_6381.rdb
pidfile /var/run/redis_6381.pid
logfile "./6381.log"
5.3.7、マスター、スレーブ1、スレーブ2の開始
redis-server /opt/sentinel/redis-6379.conf
redis-server /opt/sentinel/redis-6380.conf
redis-server /opt/sentinel/redis-6381.conf
5.3.8. スレーブ1をマスターのスレーブライブラリとして設定する
次のコマンドを実行してslave1に接続します。
redis-cli -h 192.168.200.129 -p 6380
次のコマンドを実行して、slave1をマスターのスレーブとして指定します。
slaveof 192.168.200.129 6379
次のように、情報レプリケーションを使用して、slave1 のマスター/スレーブ情報を表示します。
5.3.9. スレーブ2をマスターのスレーブライブラリとして設定する
次のコマンドを実行してスレーブ2に接続します
redis-cli -h 192.168.200.129 -p 6381
次のコマンドを実行して、slave2をマスターのスレーブとして指定します。
slaveof 192.168.200.129 6379
次のように、情報レプリケーションを使用して、slave2 のマスター/スレーブ情報を表示します。
5.3.10. マスター/スレーブレプリケーションが正常であるかどうかを確認する
次のコマンドを実行してマスターに接続します
redis-cli -h 192.168.200.129 -p 6379
次のコマンドを実行してマスター/スレーブ情報を表示します。
info replication
マスターで次のコマンドを実行してデータを書き込みます
flushdb
set name jack
以下のように、slave1のnameの値を確認します。
192.168.200.129:6380> get name
"jack"
以下のように、slave2のnameの値を確認します。
192.168.200.129:6381> get name
"jack"
データに一貫性があり、同期が正常であることを示しています。
5.3.11. Sentinel1 設定ファイルの作成: Sentinel-26379.conf
次の内容を含む Sentinel-26379.conf ファイルを /opt/sentinel ディレクトリに作成します。
# 配置文件目录
dir /opt/sentinel/
# 日志文件位置
logfile "./sentinel-26379.log"
# pid文件
pidfile /var/run/sentinel_26379.pid
# 是否后台运行
daemonize yes
# 端口
port 26379
# 监控主服务器master的名字:mymaster,IP:192.168.200.129,port:6379,最后的数字2表示当Sentinel集群中有2个Sentinel认为master存在故障不可用,则进行自动故障转移
sentinel monitor mymaster 192.168.200.129 6379 2
# master响应超时时间(毫秒),Sentinel会向master发送ping来确认master,如果在20秒内,ping不通master,则主观认为master不可用
sentinel down-after-milliseconds mymaster 60000
# 故障转移超时时间(毫秒),如果3分钟内没有完成故障转移操作,则视为转移失败
sentinel failover-timeout mymaster 180000
# 故障转移之后,进行新的主从复制,配置项指定了最多有多少个slave对新的master进行同步,那可以理解为1是串行复制,大于1是并行复制
sentinel parallel-syncs mymaster 1
# 指定mymaster主的密码(没有就不指定)
# sentinel auth-pass mymaster 123456
5.3.12. Sentinel2 設定ファイルの作成: Sentinel-26380.conf
/opt/sentinel ディレクトリに次の内容の Sentinel-26380.conf ファイルを作成します。
# 配置文件目录
dir /opt/sentinel/
# 日志文件位置
logfile "./sentinel-26380.log"
# pid文件
pidfile /var/run/sentinel_26380.pid
# 是否后台运行
daemonize yes
# 端口
port 26380
# 监控主服务器master的名字:mymaster,IP:192.168.200.129,port:6379,最后的数字2表示当Sentinel集群中有2个Sentinel认为master存在故障不可用,则进行自动故障转移
sentinel monitor mymaster 192.168.200.129 6379 2
# master响应超时时间(毫秒),Sentinel会向master发送ping来确认master,如果在20秒内,ping不通master,则主观认为master不可用
sentinel down-after-milliseconds mymaster 60000
# 故障转移超时时间(毫秒),如果3分钟内没有完成故障转移操作,则视为转移失败
sentinel failover-timeout mymaster 180000
# 故障转移之后,进行新的主从复制,配置项指定了最多有多少个slave对新的master进行同步,那可以理解为1是串行复制,大于1是并行复制
sentinel parallel-syncs mymaster 1
# 指定mymaster主的密码(没有就不指定)
# sentinel auth-pass mymaster 123456
5.3.13. Sentinel3 設定ファイルの作成: Sentinel-26381.conf
次の内容を含む Sentinel-26381.conf ファイルを /opt/sentinel ディレクトリに作成します。
# 配置文件目录
dir /opt/sentinel/
# 日志文件位置
logfile "./sentinel-26381.log"
# pid文件
pidfile /var/run/sentinel_26381.pid
# 是否后台运行
daemonize yes
# 端口
port 26381
# 监控主服务器master的名字:mymaster,IP:192.168.200.129,port:6379,最后的数字2表示当Sentinel集群中有2个Sentinel认为master存在故障不可用,则进行自动故障转移
sentinel monitor mymaster 192.168.200.129 6379 2
# master响应超时时间(毫秒),Sentinel会向master发送ping来确认master,如果在20秒内,ping不通master,则主观认为master不可用
sentinel down-after-milliseconds mymaster 60000
# 故障转移超时时间(毫秒),如果3分钟内没有完成故障转移操作,则视为转移失败
sentinel failover-timeout mymaster 180000
# 故障转移之后,进行新的主从复制,配置项指定了最多有多少个slave对新的master进行同步,那可以理解为1是串行复制,大于1是并行复制
sentinel parallel-syncs mymaster 1
# 指定mymaster主的密码(没有就不指定)
# sentinel auth-pass mymaster 123456
5.3.14. 3 人のセンチネルを開始する
センチネルを開始するには 2 つの方法があります
方式1:redis-server sentinel.conf --sentinel
方式2:redis-sentinel sentinel.conf
以下では、方法 2 を使用して 3 つのセンチネルを開始します
/opt/redis-6.2.1/src/redis-sentinel /opt/sentinel/sentinel-26379.conf
/opt/redis-6.2.1/src/redis-sentinel /opt/sentinel/sentinel-26380.conf
/opt/redis-6.2.1/src/redis-sentinel /opt/sentinel/sentinel-26381.conf
5.3.15. 3人のセンチネルの情報をそれぞれ確認する
3 つのセンチネルでそれぞれ次のコマンドを実行して、各センチネルの情報を表示します。
redis-cli -p sentinel的端口
info sentinel
センチネル1の情報は以下の通りで、他の2つのセンチネルの情報はここには記載しませんのでご自身で確認してください。
5.3.16. 自動フェイルオーバーが成功したかどうかを確認する
ステップ1: マスターで次のコマンドを実行してマスターを停止します。
192.168.200.129:6379> shutdown
ステップ 2: 2 分間待機し、フェイルオーバーが完了するまで待ちます。
Sentinel では、down-after-milliseconds の値を 60 秒に設定します。これは、ホストがオフラインであると判断する時間が 60 秒であることを意味します。そのため、最初にシステムが自動的にフェイルオーバーを完了するまで 2 分間待機します。
ステップ 3: 次のように、スレーブ 1 のマスター/スレーブ情報を表示します。
info replication コマンドを使用してマスターとスレーブの情報を表示する
ステップ 4: 次のように、スレーブ 2 のマスター/スレーブ情報を表示します。
スレーブ 2 がマスターになり、スレーブ 2 がスレーブ 1 のスレーブ ライブラリになり、フェイルオーバーが完了します。
step5: 次に、slave1とslave2が同期しているか確認します。
スレーブ2で次のコマンドを実行します。
192.168.200.129:6381> set address china
OK
スレーブ 1 で次のコマンドを実行してアドレスの値をクエリすると、結果は次のようになり、スレーブ 2 とスレーブ 1 が同期的に正常であることが示されます。
192.168.200.129:6380> get address
"china"
5.3.17. 古いマスターを自動的にバウンドするように復元する
古いマスターを復元すると、新しいマスターの下で自動的にハングアップします。これが当てはまるかどうかを確認してみましょう。
step1: 以下のコマンドを実行して旧マスターを起動します。
redis-server /opt/sentinel/redis-6379.conf
step2: 以下のコマンドを実行して古いマスターに接続します。
redis-cli -h 192.168.200.129 -p 6379
ステップ 3: 次のコマンドを実行して、マスター/スレーブ情報を表示します。
info replication
その効果は次のとおりであり、確かに期待どおりです。
5.4. その他の Sentinel の紹介
センチネルの詳細については、「Redis-Sentinel」を参照してください。
5.5. SpringBoot は Sentinel モードを統合します
5.5.1. Redis の Maven 設定の導入
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
5.5.2. application.properties での Redis センチネル情報の設定
# redis sentinel主服务名称,这个可不是随便写的哦,来源于:sentinel配置文件中sentinelmonitor后面跟的那个名称
spring.redis.sentinel.master=mymaster
# sentinel节点列表(host:port),多个之间用逗号隔开
spring.redis.sentinel.nodes=192.168.200.129:26379,192.168.200.129:26380,192.168.200.129:26381
# sentinel密码
#spring.redis.sentinel.password=
# 连接超时时间(毫秒)
spring.redis.timeout=60000
# Redis默认情况下有16个分片,这里配置具体使用的分片,默认是0
spring.redis.database=0
5.5.3. RedisTemplate ツールクラスを使用して Redis を操作する
RedisTemplate は redis を操作するために springboot で使用され、このオブジェクトを Bean に注入する必要があります。コードは次のとおりです。
@Autowired
private RedisTemplate<String, String> redisTemplate;
// 用下面5个对象来操作对应的类型
this.redisTemplate.opsForValue(); //提供了操作string类型的所有方法
this.redisTemplate.opsForList(); // 提供了操作list类型的所有方法
this.redisTemplate.opsForSet(); //提供了操作set的所有方法
this.redisTemplate.opsForHash(); //提供了操作hash表的所有方法
this.redisTemplate.opsForZSet(); //提供了操作zset的所有方法
5.5.4、RedisTemplateのサンプルコード
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* @className RedisController
* @date 2022/6/21
**/
@RestController
@RequestMapping("/redis")
public class RedisController {
@Autowired
private RedisTemplate<String, String> redisTemplate;
@RequestMapping("/stringTest")
public String stringTest() {
this.redisTemplate.delete("name");
this.redisTemplate.opsForValue().set("name", "路人");
String name = this.redisTemplate.opsForValue().get("name");
return name;
}
@RequestMapping("/listTest")
public List<String> listTest() {
this.redisTemplate.delete("names");
this.redisTemplate.opsForList().rightPushAll("names", "刘德华", "张学友", "郭富城", "黎明");
List<String> courses = this.redisTemplate.opsForList().range("names", 0, -1);
return courses;
}
@RequestMapping("setTest")
public Set<String> setTest() {
this.redisTemplate.delete("courses");
this.redisTemplate.opsForSet().add("courses", "java", "spring", "springboot");
Set<String> courses = this.redisTemplate.opsForSet().members("courses");
return courses;
}
@RequestMapping("hashTest")
public Map<Object, Object> hashTest() {
this.redisTemplate.delete("userMap");
Map<String, String> map = new HashMap<>();
map.put("name", "路人");
map.put("age", "30");
this.redisTemplate.opsForHash().putAll("userMap", map);
Map<Object, Object> userMap = this.redisTemplate.opsForHash().entries("userMap");
return userMap;
}
@RequestMapping("zsetTest")
public Set<String> zsetTest() {
this.redisTemplate.delete("languages");
this.redisTemplate.opsForZSet().add("languages", "java", 100d);
this.redisTemplate.opsForZSet().add("languages", "c", 95d);
this.redisTemplate.opsForZSet().add("languages", "php", 70);
Set<String> languages = this.redisTemplate.opsForZSet().range("languages", 0, -1);
return languages;
}
}