一、概述
- REmote DIctionary Server(Redis) 是一個由 Salvatore Sanfilippo 寫的 key-value 存儲系統,是跨平臺的非關係型數據庫。
- Redis 是一個開源的使用 ANSI C 語言編寫、遵守 BSD 協議、支持網絡、可基於內存、分佈式、可選持久性的鍵值對(Key-Value)存儲數據庫,並提供多種語言的 API。
- Redis 通常被稱爲數據結構服務器,因爲值(value)可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)、有序集合(Sorted Set:)。
- Redis持久化方式:全量數據(RDB:Redis DataBase)和增量請求(AOF:Append Only File)。全量數據在指定的時間間隔內生成數據集的時間點快照(point-in-time snapshot);增量請求則是把內存中的數據序列轉化爲操作請求,用於讀取文件進行replay得到數據,這種類似於mysql的binlog。Redis的存儲分爲內存存儲、磁盤存儲和log文件三部分。
- Redis有三種集羣模式:主從模式,Sentinel(哨兵)模式,Cluster模式
二、主從模式 部署
1)架構與簡介
主從模式特點:
- 主數據庫可以進行讀寫操作,當讀寫操作導致數據變化時會自動將數據同步給從數據庫
- 從數據庫一般都是只讀的,並且接收主數據庫同步過來的數據
- 一個master可以擁有多個slave,但是一個slave只能對應一個master
- slave掛了不影響其他slave的讀和master的讀和寫,重新啓動後會將數據從master同步過來
- master掛了以後,不影響slave的讀,但redis不再提供寫服務,master重啓後redis將重新對外提供寫服務
- master掛了以後,不會在slave節點中重新選一個master
- 當slave啓動後,主動向master發送SYNC命令。master接收到SYNC命令後在後臺保存快照(RDB持久化)和緩存保存快照這段時間的命令,然後將保存的快照文件和緩存的命令發送給slave。slave接收到快照文件和命令後加載快照文件和緩存的執行命令。
- 複製初始化後,master每次接收到的寫命令都會同步發送給slave,保證主從數據一致性。
2)環境準備
IP | 主機名 | 角色 |
---|---|---|
local-168-182-110 | 192.168.182.110 | master |
local-168-182-111 | 192.168.182.111 | slave1 |
local-168-182-112 | 192.168.182.112 | slave2 |
3)下載解壓Redis安裝包(所有節點)
下載地址:http://download.redis.io/releases/
cd /opt/software
wget http://download.redis.io/releases/redis-7.0.3.tar.gz
# 解壓
tar -xf redis-7.0.3.tar.gz
cd redis-7.0.3
# 設置環境變量
echo "export REDIS_HOME=/opt/software/redis-7.0.3">> /etc/profile
source /etc/profile
4)編譯安裝(所有節點)
cd $REDIS_HOME yum -y install gcc gcc++ make && make install # 默認安裝目錄 /usr/local/bin
5)配置成服務(所有節點)
cat << EOF > /usr/lib/systemd/system/redis.service [Unit] Description=Redis persistent key-value database After=network.target After=network-online.target Wants=network-online.target
[Service]
ExecStart=/usr/local/bin/redis-server /usr/local/redis/redis.conf --supervised systemd
ExecStop=/usr/libexec/redis-shutdown
Type=forking
User=redis
Group=redis
RuntimeDirectory=redis
RuntimeDirectoryMode=0755
LimitNOFILE=65536
PrivateTmp=true[Install]
WantedBy=multi-user.target
EOF
配置描述:
Description: # 描述服務
After: # 描述服務類別
[Service] # 服務運行參數的設置
Type=forking # 是後臺運行的形式
ExecStart # 爲服務的具體運行命令
ExecReload # 爲重啓命令
ExecStop # 爲停止命令
LimitNOFILE=65536 # 打開文件數和進程數有限制,默認限制爲1024,如果不設置,或者設置爲LimitNOFILE=unlimited(不識別),則得到了1024
PrivateTmp=True # 表示給服務分配獨立的臨時空間
#【注意】[Service]的啓動、重啓、停止命令全部要求使用絕對路徑
[Install] #運行級別下服務安裝的相關設置,可設置爲多用戶,即系統運行級別爲3
重載系統服務:systemctl daemon-reload
/usr/libexec/redis-shutdown
#!/bin/bash
#
# Wrapper to close properly redis and sentinel
test x"$REDIS_DEBUG" != x && set -x
REDIS_CLI=/usr/local/bin/redis-cli
# Retrieve service name
SERVICE_NAME="$1"
if [ -z "$SERVICE_NAME" ]; then
SERVICE_NAME=redis
fi
# Get the proper config file based on service name
CONFIG_FILE="/usr/local/redis/$SERVICE_NAME.conf"
# Use awk to retrieve host, port from config file
HOST=`awk '/^[[:blank:]]*bind/ { print $2 }' $CONFIG_FILE | tail -n1`
PORT=`awk '/^[[:blank:]]*port/ { print $2 }' $CONFIG_FILE | tail -n1`
PASS=`awk '/^[[:blank:]]*requirepass/ { print $2 }' $CONFIG_FILE | tail -n1`
SOCK=`awk '/^[[:blank:]]*unixsocket\s/ { print $2 }' $CONFIG_FILE | tail -n1`
# Just in case, use default host, port
HOST=${HOST:-127.0.0.1}
if [ "$SERVICE_NAME" = redis ]; then
PORT=${PORT:-6379}
else
PORT=${PORT:-26739}
fi
# Setup additional parameters
# e.g password-protected redis instances
[ -z "$PASS" ] || ADDITIONAL_PARAMS="-a $PASS"
# shutdown the service properly
if [ -e "$SOCK" ] ; then
$REDIS_CLI -s $SOCK $ADDITIONAL_PARAMS shutdown
else
$REDIS_CLI -h $HOST -p $PORT $ADDITIONAL_PARAMS shutdown
fi
配置完就可以通過systemctl啓停redis了
6)授權啓動服務(所有節點)
chmod +x /usr/libexec/redis-shutdown
useradd -s /sbin/nologin redis
mkdir /usr/local/redis ; cp $REDIS_HOME/redis.conf /usr/local/redis/ && chown -R redis:redis /usr/local/redis
mkdir -p /opt/software/redis-7.0.3/data && chown -R redis:redis /opt/software/redis-7.0.3/data
yum install -y bash-completion && source /etc/profile # 命令補全
systemctl daemon-reload
systemctl enable redis
7)配置(redis.conf)
修改linux內核參數# 臨時生效 sysctl -w vm.overcommit_memory=1 # 永久生效 echo 'vm.overcommit_memory=1' >> /etc/sysctl.conf && sysctl -p ### 可選值:0,1,2。 # 0,:表示內核將檢查是否有足夠的可用內存供應用進程使用;如果有足夠的可用內存,內存申請允許;否則,內存申請失敗,並把錯誤返回給應用進程。 # 1:表示內核允許分配所有的物理內存,而不管當前的內存狀態如何。 # 2: 表示內核允許分配超過所有物理內存和交換空間總和的內存。
2、slave1節點配置
修改配置如下: vi /usr/local/redis/redis.confbind 192.168.182.111 # 監聽ip,多個ip用空格分隔 daemonize yes # 允許後臺啓動 logfile "/usr/local/redis/redis.log" # 日誌路徑 dir /opt/software/redis-7.0.3/data # 數據庫備份文件存放目錄 # replicaof用於追隨某個節點的redis,被追隨的節點爲主節點,追隨的爲從節點。就是設置master節點 replicaof 192.168.182.110 6379 masterauth 123456 # slave連接master密碼,master可省略 requirepass 123456 # 設置master連接密碼,slave可省略 appendonly yes # 在/opt/software/redis-7.0.3/data目錄生成appendonly.aof文件,將每一次寫操作請求都追加到appendonly.aof 文件中
3、slave2節點配置
修改配置如下: vi /usr/local/redis/redis.confbind 192.168.182.112 # 監聽ip,多個ip用空格分隔 daemonize yes # 允許後臺啓動 logfile "/usr/local/redis/redis.log" # 日誌路徑 dir /opt/software/redis-7.0.3/data # 數據庫備份文件存放目錄 # replicaof用於追隨某個節點的redis,被追隨的節點爲主節點,追隨的爲從節點。就是設置master節點 replicaof 192.168.182.110 6379 masterauth 123456 # slave連接master密碼,master可省略 requirepass 123456 # 設置master連接密碼,slave可省略 appendonly yes # 在/opt/software/redis-7.0.3/data目錄生成appendonly.aof文件,將每一次寫操作請求都追加到appendonly.aof 文件中
8)啓動Redis服務
systemctl start redis systemctl status redis
9)查看集羣狀態
# 交互式 redis-cli -h 192.168.182.110 -a 123456 192.168.182.110:6379> info replication
交互式
redis-cli -h 192.168.182.110
192.168.182.110:6379> auth 123456
192.168.182.110:6379> info replication非交互式
redis-cli -h 192.168.182.110 -a 123456 info replication
在這裏Redis的主從模式就部署完了(一主兩從)
【溫馨提示】在slave節點上只能讀,無法寫入數據
三、Sentinel(哨兵)模式 部署
1)架構與簡介
主從模式的弊端就是不具備高可用性,當master掛掉以後,Redis將不能再對外提供寫入操作,因此sentinel應運而生。sentinel中文含義爲哨兵,顧名思義,它的作用就是監控redis集羣的運行狀況,特點如下:
- sentinel模式是建立在主從模式的基礎上,如果只有一個Redis節點,sentinel就沒有任何意義
- 當master掛了以後,sentinel會在slave中選擇一個做爲master,並修改它們的配置文件,其他slave的配置文件也會被修改,比如slaveof屬性會指向新的master
- 當master重新啓動後,它將不再是master而是做爲slave接收新的master的同步數據
- sentinel因爲也是一個進程有掛掉的可能,所以sentinel也會啓動多個形成一個sentinel集羣
- 多sentinel配置的時候,sentinel之間也會自動監控
- 當主從模式配置密碼時,sentinel也會同步將配置信息修改到配置文件中,不需要擔心
- 一個sentinel或sentinel集羣可以管理多個主從Redis,多個sentinel也可以監控同一個redis
- sentinel最好不要和Redis部署在同一臺機器,不然Redis的服務器掛了以後,sentinel也掛了
- 每個sentinel以每秒鐘一次的頻率向它所知的master,slave以及其他sentinel實例發送一個 PING 命令
- 如果一個實例距離最後一次有效回覆 PING 命令的時間超過 down-after-milliseconds 選項所指定的值, 則這個實例會被sentinel標記爲主觀下線。
- 如果一個master被標記爲主觀下線,則正在監視這個master的所有sentinel要以每秒一次的頻率確認master的確進入了主觀下線狀態
- 當有足夠數量的sentinel(大於等於配置文件指定的值)在指定的時間範圍內確認master的確進入了主觀下線狀態, 則master會被標記爲客觀下線
- 在一般情況下, 每個sentinel會以每 10 秒一次的頻率向它已知的所有master,slave發送 INFO 命令
- 當master被sentinel標記爲客觀下線時,sentinel向下線的master的所有slave發送 INFO 命令的頻率會從 10 秒一次改爲 1 秒一次
- 若沒有足夠數量的sentinel同意master已經下線,master的客觀下線狀態就會被移除;若master重新向sentinel的 PING 命令返回有效回覆,master的主觀下線狀態就會被移除
2)環境準備
IP | 主機名 | 角色 |
---|---|---|
local-168-182-110 | 192.168.182.110 | master,sentinel |
local-168-182-111 | 192.168.182.111 | slave1,sentinel |
local-168-182-112 | 192.168.182.112 | slave2,sentinel |
【溫馨提示】 sentinel 最好跟redis部署在不同的機器上,sentinel 端口:26379
3)配置sentinel(所有節點)
【溫馨提示】前面已經安裝過了redis主從模式了,因爲哨兵模式是基於主從模式的,所以redis的配置這裏就省略了,直接修改sentinel配置文件,配置3個哨兵,每個哨兵的配置都是一樣的。
# 三個節點創建存儲目錄 mkdir /opt/software/redis-7.0.3/sentinel mkdir /opt/software/redis-7.0.3/sentinel ; chown -R redis:redis /opt/software/redis-7.0.3/
cat >/usr/local/redis/sentinel.conf<
sentinel monitor mymaster 192.168.182.110 6379 2
sentinel auth-pass mymaster 123456判斷master主觀下線時間,默認30s
sentinel down-after-milliseconds mymaster 30000
EOF
4)啓動sentinel(所有節點)
/usr/local/bin/redis-sentinel /usr/local/redis/sentinel.conf netstat -tnlp|grep 26379
5)模擬故障測試
# 停掉master systemctl stop redis redis-cli -h 192.168.182.111 -a 123456 info replication
發現master節點已經切換到其它節點了。再測試一下讀寫
[root@local-168-182-110 redis-7.0.3]# redis-cli -h 192.168.182.112 -a 123456
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.182.112:6379> set k2 v2
OK
新的master節點寫能力也正常,接下來就是恢復故障了。
redis-cli -h 192.168.182.112 -a 123456 info replication
發現就算原先的master節點恢復了,也不會切換到master角色,而是作爲slave角色。
四、Cluster(集羣)模式 部署
1)架構與簡介
- sentinel模式基本可以滿足一般生產的需求,具備高可用性。但是當數據量過大到一臺服務器存放不下的情況時,主從模式或sentinel模式就不能滿足需求了,這個時候需要對存儲的數據進行分片,將數據存儲到多個Redis實例中。cluster模式的出現就是爲了解決單機Redis容量有限的問題,將Redis的數據根據一定的規則分配到多臺機器。
- cluster可以說是sentinel+主從模式的結合體,通過cluster可以實現主從和master重選功能,所以如果配置兩個副本三個分片的話,就需要六個Redis實例。因爲Redis的數據是根據一定規則分配到cluster的不同機器的,當數據量過大時,可以新增機器進行擴容。
- 使用集羣,只需要將redis配置文件中的cluster-enable配置打開即可。每個集羣中至少需要三個主數據庫才能正常運行,新增節點非常方便。
- 多個redis節點網絡互聯,數據共享
- 所有的節點都是一主一從(也可以是一主多從),其中從不提供服務,僅作爲備用
- 不支持同時處理多個key(如MSET/MGET),因爲redis需要把key均勻分佈在各個節點上,併發量很高的情況下同時創建key-value會降低性能並導致不可預測的行爲
- 支持在線增加、刪除節點
- 客戶端可以連接任何一個主節點進行讀寫
2)環境準備
三臺機器,分別開啓三個redis服務,也就是每個節點就是一主兩從模式IP | 主機名 | 端口 | 節點 |
---|---|---|---|
local-168-182-110 | 192.168.182.110 | 7001,7002,7003 | node1 |
local-168-182-111 | 192.168.182.111 | 7001,7002,7003 | node2 |
local-168-182-112 | 192.168.182.112 | 7001,7002,7003 | node3 |
3)修改配置(所有節點)
【溫馨提示】這裏是基於主從模式的配置修改,不是基於主從模式部署,哨兵模式是基於主從模式部署。
# 創建存儲目錄 mkdir -p /opt/software/redis-7.0.3/cluster/redis_{7001..7003} cp /usr/local/redis/redis.conf /usr/local/redis/cluster_redis_7001.conf cp /usr/local/redis/redis.conf /usr/local/redis/cluster_redis_7002.conf cp /usr/local/redis/redis.conf /usr/local/redis/cluster_redis_7003.conf
chown -R redis:redis /usr/local/redis ;chown -R redis:redis /opt/software/redis-7.0.3/cluster
修改配置文件/usr/local/redis/cluster_redis_7001.conf
# 【注意】節點不一樣,IP不一樣,記得修改這個bind配置
bind 192.168.182.110
port 7001
daemonize yes
pidfile "/var/run/cluster_redis_7001.pid"
logfile "/usr/local/redis/cluster_redis_7001.log"
dir "/opt/software/redis-7.0.3/cluster/redis_7001"
#replicaof 192.168.182.110 6379
masterauth "123456"
requirepass "123456"
appendonly yes
# 開啓集羣模式
cluster-enabled yes
# 雖然此配置的名字叫"集羣配置文件",但是此配置文件不能人工編輯,它是集羣節點自動維護的文件,主要用於記錄集羣中有哪些節點、他們的狀態以及一些持久化參數等,方便在重啓時恢復這些狀態。通常是在收到請求之後這個文件就會被更新。
cluster-config-file nodes_7001.conf
cluster-node-timeout 15000
修改配置文件/usr/local/redis/cluster_redis_7002.conf
# 【注意】節點不一樣,IP不一樣,記得修改這個bind配置
bind 192.168.182.110
port 7002
daemonize yes
pidfile "/var/run/cluster_redis_7002.pid"
logfile "/usr/local/redis/cluster_redis_7002.log"
dir "/opt/software/redis-7.0.3/cluster/redis_7002"
#replicaof 192.168.182.110 6379
masterauth "123456"
requirepass "123456"
appendonly yes
# 配置yes則開啓集羣功能,此redis實例作爲集羣的一個節點,否則,它是一個普通的單一的redis實例。
cluster-enabled yes
# 雖然此配置的名字叫"集羣配置文件",但是此配置文件不能人工編輯,它是集羣節點自動維護的文件,主要用於記錄集羣中有哪些節點、他們的狀態以及一些持久化參數等,方便在重啓時恢復這些狀態。通常是在收到請求之後這個文件就會被更新。
cluster-config-file nodes_7002.conf
cluster-node-timeout 15000
修改配置文件/usr/local/redis/cluster_redis_7003.conf
# 【注意】節點不一樣,IP不一樣,記得修改這個bind配置
bind 192.168.182.110
port 7003
daemonize yes
pidfile "/var/run/cluster_redis_7003.pid"
logfile "/usr/local/redis/cluster_redis_7003.log"
dir "/opt/software/redis-7.0.3/cluster/redis_7003"
#replicaof 192.168.182.110 6379
masterauth "123456"
requirepass "123456"
appendonly yes
# 配置yes則開啓集羣功能,此redis實例作爲集羣的一個節點,否則,它是一個普通的單一的redis實例。
cluster-enabled yes
# 雖然此配置的名字叫"集羣配置文件",但是此配置文件不能人工編輯,它是集羣節點自動維護的文件,主要用於記錄集羣中有哪些節點、他們的狀態以及一些持久化參數等,方便在重啓時恢復這些狀態。通常是在收到請求之後這個文件就會被更新。
cluster-config-file nodes_7003.conf
cluster-node-timeout 15000
其它兩臺機器配置與192.168.182.110一致,只是ip不同,此處省略
# 將配置copy到另外兩個節點
scp -r /usr/local/redis/cluster_redis_{7001..7003}.conf local-168-182-111:/usr/local/redis/
scp -r /usr/local/redis/cluster_redis_{7001..7003}.conf local-168-182-112:/usr/local/redis/
# 在node2上執行
sed -i 's/192.168.182.110/192.168.182.111/g' /usr/local/redis/cluster_redis_{7001..7003}.conf
# 在node3上執行
sed -i 's/192.168.182.110/192.168.182.112/g' /usr/local/redis/cluster_redis_{7001..7003}.conf
4)啓動Redis服務(所有節點)
redis-server /usr/local/redis/cluster_redis_7001.conf netstat -tnlp|grep 7001 redis-server /usr/local/redis/cluster_redis_7002.conf netstat -tnlp|grep 7002 redis-server /usr/local/redis/cluster_redis_7003.conf netstat -tnlp|grep 7003 tail -f /usr/local/redis/cluster_redis_7001.log tail -f /usr/local/redis/cluster_redis_7002.log tail -f /usr/local/redis/cluster_redis_7003.log
5)創建集羣
# –cluster-replicas 2 : 表示集羣的一個主節點有2個從節點,就是一主兩從模式 redis-cli -a 123456 --cluster create \ 192.168.182.110:7001 192.168.182.110:7002 192.168.182.110:7003 \ 192.168.182.111:7001 192.168.182.111:7002 192.168.182.111:7003 \ 192.168.182.112:7001 192.168.182.112:7002 192.168.182.112:7003 \ --cluster-replicas 2
會自動生成nodes.conf文件
ll /opt/software/redis-7.0.3/cluster/redis_{7001..7003}
6)集羣操作
1、登錄集羣
redis-cli -c -h 192.168.182.110 -p 7001 192.168.182.110:7001> auth 123456
2、查看集羣信息
redis-cli -c -h 192.168.182.129 -p 7001 192.168.182.110:7001> auth 123456 192.168.182.110:7001> CLUSTER INFO
3、列出節點信息
redis-cli -c -h 192.168.182.129 -p 7001 192.168.182.110:7001> auth 123456 192.168.182.110:7001> CLUSTER INFO 192.168.182.110:7001> CLUSTER NODES
4、增加節點
node1上增加一節點【1】配置
# copy配置 cp /usr/local/redis/cluster_redis_7003.conf /usr/local/redis/cluster_redis_7004.conf # 創建存儲目錄 mkdir /opt/software/redis-7.0.3/cluster/redis_7004
修改配置
vi /usr/local/redis/cluster_redis_7004.conf
bind 192.168.182.110
port 7004
daemonize yes
pidfile "/var/run/redis_7004.pid"
logfile "/usr/local/redis/cluster_redis_7004.log"
dir "/opt/software/redis-7.0.3/cluster/redis_7004"replicaof 192.168.182.110 6379
masterauth "123456"
requirepass "123456"
appendonly yes
cluster-enabled yes
cluster-config-file nodes_7004.conf
cluster-node-timeout 15000授權
chown -R redis:redis /usr/local/redis && chown -R redis:redis /opt/software/redis-7.0.3/cluster/redis_7004
【2】啓動服務
redis-server /usr/local/redis/cluster_redis_7004.conf netstat -tnlp|grep :7004
【3】集羣中增加節點
[root@local-168-182-110 ~]# redis-cli -c -h 192.168.182.110 -p 7001 192.168.182.110:7001> auth 123456 # 添加節點 192.168.182.110:7001> CLUSTER MEET 192.168.182.110 7004 # 查看節點信息 192.168.182.110:7001> CLUSTER NODES
可以看到,新增的節點都是以master身份加入集羣的
【4】更換節點身份
將新增的192.168.182.110:7004節點身份改爲192.168.182.130:7001的slaveredis-cli -c -h 192.168.182.110 -p 7004 192.168.182.110:7004> auth 123456 # 改變節點類型 192.168.182.110:7004> cluster replicate 0a9d68b75d529b611b4bae5753be602006fcef74 192.168.182.110:7004> CLUSTER NODES
5、刪除節點
redis-cli -c -h 192.168.182.110 -p 7001 192.168.182.110:7001> auth 123456 # 查看節點 192.168.182.110:7001> CLUSTER NODES # 刪除節點 192.168.182.110:7001> CLUSTER FORGET 378ef2a24fb4138496b8da85bb66143800b53686 # 檢查節點信息 192.168.182.110:7001> CLUSTER NODES
6、保存配置
redis-cli -c -h 192.168.182.110 -p 7001 192.168.182.110:7001> auth 123456 # 將節點的配置文件保存到硬盤裏面 192.168.182.110:7001> CLUSTER SAVECONFIG
可以看到,之前刪除的節點又恢復了,這是因爲對應的配置文件沒有刪除,執行CLUSTER SAVECONFIG恢復。
7、模擬master節點掛掉
netstat -lntp |grep :7001|awk '{print $NF}'|cut -d '/' -f 1|xargs kill -9 redis-cli -c -h 192.168.182.111 -p 7001 -a 123456 CLUSTER NODES
對應192.168.182.110:7001的一行可以看到,master fail,狀態爲disconnected;而對應192.168.182.110:7004的一行,slave已經變成master。
【故障恢復】重新啓動192.168.182.110:7001節點
redis-server /usr/local/redis/cluster_redis_7001.conf
redis-cli -c -h 192.168.182.111 -p 7001 -a 123456 CLUSTER NODES
可以看到,192.168.182.110:7001節點啓動後爲slave節點,並且是192.168.182.110:7004的slave節點。即master節點如果掛掉,它的slave節點變爲新master節點繼續對外提供服務,而原來的master節點如果重啓,則變爲新master節點的slave節點。
【溫馨提示】cluster不能選擇db,只能默認db爲0,所以select切庫相當於是不能使用的。
五、簡單使用
1)集羣常用操作
1、查看集羣信息
cluster info :打印集羣的信息 cluster nodes :列出集羣當前已知的所有節點( node),以及這些節點的相關信息。
2、節點操作
cluster meet :將 ip 和 port 所指定的節點添加到集羣當中,讓它成爲集羣的一份子。 cluster forget :從集羣中移除 node_id 指定的節點。 cluster replicate :將當前節點設置爲 node_id 指定的節點的從節點。 cluster saveconfig :將節點的配置文件保存到硬盤裏面。
3、槽(slot)
cluster addslots [slot ...] :將一個或多個槽( slot)指派( assign)給當前節點。 cluster delslots [slot ...] :移除一個或多個槽對當前節點的指派。 cluster flushslots :移除指派給當前節點的所有槽,讓當前節點變成一個沒有指派任何槽的節點。 cluster setslot node :將槽 slot 指派給 node_id 指定的節點,如果槽已經指派給 另一個節點,那麼先讓另一個節點刪除該槽>,然後再進行指派。 cluster setslot migrating :將本節點的槽 slot 遷移到 node_id 指定的節點中。 cluster setslot importing :從 node_id 指定的節點中導入槽 slot 到本節點。 cluster setslot stable :取消對槽 slot 的導入( import)或者遷移( migrate)。
4、鍵
cluster keyslot :計算鍵 key 應該被放置在哪個槽上。 cluster countkeysinslot :返回槽 slot 目前包含的鍵值對數量。 cluster getkeysinslot :返回 count 個 slot 槽中的鍵
2)redis 常用操作
1、字符串(String)
# 登錄master節點,slave節點是隻讀的 redis-cli -c -h 192.168.182.112 -p 7001 192.168.182.112:7001> auth 123456 OK 192.168.182.112:7001> set k1 v1 OK 192.168.182.112:7001> get k1 "v1" # 獲取多個值 192.168.182.112:7001> mget k1 k2 k3 1) "v1" 2) "v2" 3) "v3"
2、哈希(Hash)
Redis hash 是一個 string 類型的 field(字段) 和 value(值) 的映射表,hash 特別適合用於存儲對象。# 登錄master節點,slave節點是隻讀的 redis-cli -c -h 192.168.182.112 -p 7001 192.168.182.112:7001> auth 123456 # 設置 192.168.182.112:7001> HSET myhash field1 "foo" (integer) 1 # 獲取 192.168.182.112:7001> hget myhash field1 "foo"
3、列表(List)
Redis列表是簡單的字符串列表,按照插入順序排序。你可以添加一個元素到列表的頭部(左邊)或者尾部(右邊)# 登錄master節點,slave節點是隻讀的 redis-cli -c -h 192.168.182.112 -p 7001 192.168.182.112:7001> auth 123456 192.168.182.112:7001> LPUSH larr v1 (integer) 1 192.168.182.112:7001> LPUSH larr v2 (integer) 2 192.168.182.112:7001> LPUSH larr v3 (integer) 3 # 獲取0到10個元素 192.168.182.112:7001> LRANGE larr 0 10 1) "v3" 2) "v2" 3) "v1"
4、集合(Set)
Redis 的 Set 是 String 類型的無序集合。集合成員是唯一的,這就意味着集合中不能出現重複的數據。# 登錄master節點,slave節點是隻讀的 redis-cli -c -h 192.168.182.112 -p 7001 192.168.182.112:7001> auth 123456 192.168.182.112:7001> SADD myset "hello" (integer) 1 192.168.182.112:7001> SADD myset "foo" (integer) 1 # 已經存在,則不能添加該元素 192.168.182.112:7001> SADD myset "hello" (integer) 0 # 獲取 192.168.182.112:7001> SMEMBERS myset 1) "foo" 2) "hello" 192.168.182.112:6379>
5、 有序集合(sorted set)
Redis 有序集合和集合一樣也是 string 類型元素的集合,且不允許重複的成員。不同的是每個元素都會關聯一個 double 類型的分數。redis 正是通過分數來爲集合中的成員進行從小到大的排序。有序集合的成員是唯一的,但分數(score)卻可以重複。# 登錄master節點,slave節點是隻讀的 redis-cli -c -h 192.168.182.112 -p 7001 192.168.182.112:7001> auth 123456 192.168.182.112:7001> ZADD key1 1 redis (integer) 1 192.168.182.112:7001> ZADD key1 2 mongodb (integer) 1 192.168.182.112:7001> ZADD key1 3 mysql (integer) 1 # 已經存在,不能添加 192.168.182.112:7001> ZADD key1 3 mysql (integer) 0 # 已經存在,不能添加 192.168.182.112:7001> ZADD key1 4 mysql (integer) 0 # 獲取數據 192.168.182.112:7001> ZRANGE key1 0 10 WITHSCORES 1) "redis" 2) "1" 3) "mongodb" 4) "2" 5) "mysql" 6) "4"
主從模式、哨兵模式、集羣模式的環境部署就到這裏了,redis更多操作請查看官方文檔
來源:https://blog.csdn.net/qq_35745940/article/details/125822942