Redis
前言
redis是一個開源的、使用C語言編寫的、支持網絡交互的、可基于內存也可持久化的Key-Value數據庫
redis的官網:redis.io
注:域名后綴io屬于國家域名,是british Indian Ocean territory,即英屬印度洋領地
redis的特點
1.支持數據持久化 (可以將數據存儲在磁盤中,當redis重啟之后會自動加載磁盤中的數據)
2.支持事務
3.支持搭建集群 (mencached不支持集群)
4.豐富的數據結構 ----- string,list,set,zset,hash等數據結構的存儲
安裝Redis
單機版安裝
redis的安裝
##獲取源碼包
wget https://download.redis.io/releases/redis-7.4.0.tar.gz
##解壓重命名
tar xvzf redis-7.4.0.tar.gz -C /usr/local/
cd /usr/local/
mv redis-7.4.0/ redis
##安裝編譯工具對redis進行編譯
yum -y install gcc make
cd redis/
make
##出現以下頁面就表示編譯完成
LINK redis-cli
CC redis-benchmark.o
LINK redis-benchmark
INSTALL redis-check-rdb
INSTALL redis-check-aof
Hint: It's a good idea to run 'make test' ;)
make[1]: Leaving directory `/usr/local/redis/src'
redis修改配置文件并啟動
vim /usr/local/redis/redis.conf
bind 0.0.0.0
daemonize yes #開啟后臺模式將no改為yes
timeout 300 #連接超時時間
port 6379 #端口號
dir ./data ###存放在安裝目錄下的data目錄下 用于存放數據
logfile "/var/log/redis.log" ###存放日志
pidfile /var/run/redis_6379.pid #定義pid文件
--##創建redis數據存放目錄
cd /usr/local/redis
mkdir data/
--##配置redis為systemctl啟動
vim /lib/systemd/system/redis.service
[Unit]
Description=Redis
After=network.target
[Service]
ExecStart=/usr/local/redis/src/redis-server /usr/local/redis/redis.conf --daemonize no
ExecStop=/usr/local/redis/src/redis-cli -h 127.0.0.1 -p 6379 shutdown
[Install]
WantedBy=multi-user.target
redis啟動
--##啟動redis(systemctl啟動):
systemctl daemon-reload
systemctl start redis.service
--##啟動redis
cd /usr/local/redis
nohup src/redis-server redis.conf &
./src/redis-cli
[root@redis-master src]# pwd
/usr/local/redis/src
[root@redis-master src]# ./redis-cli
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> set name jack
OK
127.0.0.1:6379> get name
"jack"
keys *查看所有key
del 刪除key
expire 給key設置過期時間
ttl 查看key的剩余有效期
exists 查看key是否存在,0為不存在,1為存在
info 查看redis的信息
flushdb 清空數據(慎用)
redis相關的工具
./redis-benchmark #用于進行redis性能測試的工具
./redis-check-dump #用于修復出問題的dump.rdb文件
./redis-cli #redis的客戶端
./redis-server #redis的服務端
./redis-check-aof #用于修復出問題的AOF文件
./redis-sentinel #用于集群管理
redis一主兩從三哨兵
一主兩從配置文件修改
環境準備
redis版本 redis7.4.0
192.168.13.111 redis主節點 redis、sentinel
192.168.13.112 redis從節點 redis、sentinel
192.168.13.115 redis從節點 redis、sentinel
主節點修改配置文件
vim /usr/local/redis/redis.conf
bind 0.0.0.0
protected no #關閉加密保護 否則從節點無法連接
daemonize yes #開啟后臺模式將no改為yes
timeout 300 #連接超時時間
port 6379 #端口號
logfile "/var/log/redis.log" ###存放日志
pidfile /var/run/redis_6379.pid #定義pid文件
dbfilename dump.rdb
dir ./data ###存放在安裝目錄下的data目錄下 用于存放數據(目錄需要提前創建)
save 3600 1 300 100 60 10000 #snapshot觸發的時機
stop-writes-on-bgsave-error yes #當snapshot時出現錯誤無法繼續時,阻塞客戶端“變更操作”,“錯誤”可能因為磁盤已滿/磁盤故障/OS級別異常等
rdbcompression yes #啟用rdb文件壓縮,默認為“yes”,壓縮往往意味著“額外的cpu消耗”,同時也意味這較小的文件尺寸以及較短的網絡傳輸時間
appendonly yes #開啟aof功能,只有在“yes”下,aof重寫/文件同步等特性才會生效
將主服務器的redis安裝目錄發送到從服務器
scp -r /usr/local/redis/ 192.168.13.112:/usr/local/
scp -r /usr/local/redis/ 192.168.13.115:/usr/local/
修改從節點配置文件
vim /usr/local/redis/redis.conf
replicaof 192.168.13.111 6379 ##添加 master IP和端口(注意:老版本的redis是搜索 slaveof 有些許區別)
啟動測試
##-->master節點操作
pkill -9 redis
./src/redis-server redis.conf
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> set name jack
OK
127.0.0.1:6379> get name
"jack"
##查看連接狀態
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2 ##兩個從節點
slave0:ip=192.168.13.112,port=6379,state=online,offset=6535,lag=0
slave1:ip=192.168.13.115,port=6379,state=online,offset=6535,lag=0
##-->從節點操作
./src/redis-server redis.conf
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> get name
"jack"
##查看連接狀態
127.0.0.1:6379> info replication
# Replication
role:slave
master_host:192.168.13.111
master_port:6379
master_link_status:up
一主兩從搭建成功
下面開始配置三哨兵
哨兵搭建
配置文件修改
vim /usr/local/redis/sentinel.conf
protected-mode no
daemonize yes
logfile "/var/log/sentinel.log"
sentinel monitor mymaster 192.168.13.111 6379 2 ##監控的主節點信息 “2”表示有兩個sentinel認為主節點主觀下線,則將主機點判斷為客觀下線
sentinel down-after-milliseconds mymaster 30000 ##30s后主機點無反應,則判斷為主觀下線
sentinel failover-timeout mymaster 180000
將配置文件發送到另外兩臺服務器
scp /usr/local/redis/sentinel.conf 192.168.13.112:/usr/local/redis/
scp /usr/local/redis/sentinel.conf 192.168.13.115:/usr/local/redis/
啟動測試
##--啟動哨兵(三臺機器均啟動)
./src/redis-sentinel sentinel.conf
##--動態查看
tailf /var/log/sentinel.log
##主節點
cd /usr/local/redis
./src/redis-cli
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.13.115,port=6379,state=online,offset=684083,lag=1
slave1:ip=192.168.13.112,port=6379,state=online,offset=684226,lag=0
##--停止主節點redis
[root@redis-master redis]# netstat -tnlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:6379 0.0.0.0:* LISTEN 7544/./src/redis-se
tcp 0 0 0.0.0.0:26379 0.0.0.0:* LISTEN 7479/./src/redis-se
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 961/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1204/master
tcp6 0 0 :::26379 :::* LISTEN 7479/./src/redis-se
tcp6 0 0 :::22 :::* LISTEN 961/sshd
tcp6 0 0 ::1:25 :::* LISTEN 1204/master
[root@redis-master redis]# kill 7544
##--新的主節點機器
cd /usr/local/redis
./src/redis-cli
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.13.112,port=6379,state=online,offset=743594,lag=1
##已實現故障轉移
##--啟動故障機器
./src/redis-server redis.conf
./src/redis-cli
127.0.0.1:6379> info replication
# Replication
role:slave
master_host:192.168.13.115
master_port:6379
master_link_status:up
恢復的機器會自動加入集群降為從節點
浙公網安備 33010602011771號