Redis環境部署(主從模式、哨兵模式、集羣模式)

一、概述

  • 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模式
官方文檔:https://redis.io/docs/

二、主從模式 部署

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.conf

bind 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.conf

bind 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配置打開即可。每個集羣中至少需要三個主數據庫才能正常運行,新增節點非常方便。
cluster集羣特點:
  • 多個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的slave

redis-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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章