Redis進(jìn)階

Redis事務(wù)

命令 描述
multi 標(biāo)記一個(gè)事務(wù)的開始
exec 執(zhí)行所有事務(wù)塊內(nèi)的命令
discard 取消事務(wù),放棄執(zhí)行事務(wù)塊內(nèi)的所有命令
watch key [key] 監(jiān)視一個(gè)(或多個(gè)) key ,如果在事務(wù)執(zhí)行之前這個(gè)(或這些) key 被其他命令所改動(dòng),那么事務(wù)將被打斷。
unwatch 取消watch命令對(duì)所有 key 的監(jiān)視。

Redis持久化

RDB

  • 介紹

    在指定的時(shí)間間隔內(nèi)生成內(nèi)存中整個(gè)數(shù)據(jù)集的持久化快照??煺瘴募J(rèn)被存儲(chǔ)在當(dāng)前文件夾中,名稱為dump.rdb,可以通過dir和dbfilename參數(shù)來修改默認(rèn)值,如果不修改則在啟動(dòng)redis的目錄中生成rdb文件。

    Redis會(huì)單獨(dú)創(chuàng)建(fork)一個(gè)子進(jìn)程來進(jìn)行持久化,會(huì)先將數(shù)據(jù)寫入到一個(gè)臨時(shí)文件中,待持久化過程都結(jié)束了,再用這個(gè)臨時(shí)文件替換上次持久化好的文件。 整個(gè)過程中,主進(jìn)程是不進(jìn)行任何的IO操作的,這就確保了極高的性能。

  • 修改redis.conf

# redis是基于內(nèi)存的數(shù)據(jù)庫(kù),可以通過設(shè)置該值定期寫入磁盤。 
# 注釋掉“save”這一行配置項(xiàng)就可以讓保存數(shù)據(jù)庫(kù)功能失效 # 900秒(15分鐘)內(nèi)至少1個(gè)key值改變(則進(jìn)行數(shù)據(jù)庫(kù)保存--持久化)
# 300秒(5分鐘)內(nèi)至少10個(gè)key值改變(則進(jìn)行數(shù)據(jù)庫(kù)保存--持久化) 
# 60秒(1分鐘)內(nèi)至少10000個(gè)key值改變(則進(jìn)行數(shù)據(jù)庫(kù)保存--持久化) 
save 900 1 
save 300 10 
save 60 10000 
#當(dāng)RDB持久化出現(xiàn)錯(cuò)誤后,是否依然進(jìn)行繼續(xù)進(jìn)行工作,yes:不能進(jìn)行工作,no:可以繼續(xù)進(jìn)行工作,可以通過info中的rdb_last_bgsave_status了解RDB持久化是否有錯(cuò)誤 
stop-writes-on-bgsave-error yes 
#使用壓縮rdb文件,rdb文件壓縮使用LZF壓縮算法,yes:壓縮,但是需要一些cpu的消耗。no:不壓縮,需要更多的磁盤空間 
rdbcompression yes 
#是否校驗(yàn)rdb文件。從rdb格式的第五個(gè)版本開始,在rdb文件的末尾會(huì)帶上CRC64的校驗(yàn)和。這跟有利于文件的容錯(cuò)性,但是在保存rdb文件的時(shí)候,會(huì)有大概10%的性能損耗,所以如果你追求高性能,可以關(guān)閉該配置。 
rdbchecksum yes 
#rdb文件的名稱 
dbfilename dump.rdb 
#數(shù)據(jù)目錄,數(shù)據(jù)庫(kù)的寫入會(huì)在這個(gè)目錄。rdb、aof文件也會(huì)寫在這個(gè)目錄 
dir /data

AOF

  • 介紹
    以日志的形式來記錄每個(gè)寫操作,將Redis執(zhí)行過的所有寫指令記錄下來(讀操作補(bǔ)不可記錄),只許追加文件但不可以改寫文件,redis啟動(dòng)之初會(huì)讀取改文件重新構(gòu)建數(shù)據(jù)。保存的是appendonly.aof文件
# aof機(jī)制默認(rèn)關(guān)閉,可以通過參數(shù)appendonly 開啟aof機(jī)制
appendonly yes
# 通過參數(shù)appendfilename指定aof文件名稱
appendfilename myaoffile.aof

如果AOF和RDB,redis優(yōu)先使用AOF。

Redis主從復(fù)制

配置

保留一個(gè)redis.conf公共文件和三個(gè)其他文件。


image.png

配置文件如下:修改端口即可。使用include引入redis.conf。


image.png

redis.conf中關(guān)閉appendonly。其中當(dāng)其他文件公用redis.conf中的rdb數(shù)據(jù)路徑dir 。

# aof機(jī)制默認(rèn)關(guān)閉,可以通過參數(shù)appendonly 開啟aof機(jī)制
appendonly no
# 通過參數(shù)appendfilename指定aof文件名稱
appendfilename myaoffile.aof

設(shè)置主從

配從(庫(kù))不配主(庫(kù)),可以通過info replication查看狀態(tài)信息。

#配置從庫(kù)
slaveof 主庫(kù)ip 主庫(kù)端口
#查看主從信息
info replication

? 每次與master斷開后,都需要重新連接,除非你配置進(jìn)redis.conf文件

image.png

薪火相傳

含義:就是上一個(gè)Slave可以是下一個(gè)slave的Master,Slave同樣可以接收其他slaves的連接和同步請(qǐng)求,那么該slave作為了鏈條中下一個(gè)的master,可以有效減輕master的寫壓力。
反客為主
使用以下命令使當(dāng)前數(shù)據(jù)庫(kù)停止與其他數(shù)據(jù)庫(kù)的同步,轉(zhuǎn)成主數(shù)據(jù)庫(kù)。

SLAVEOF no one

哨兵模式

反客為主的自動(dòng)版,能夠后臺(tái)監(jiān)控Master庫(kù)是否故障,如果故障了根據(jù)投票數(shù)自動(dòng)將slave庫(kù)轉(zhuǎn)換為主庫(kù)。一組sentinel能同時(shí)監(jiān)控多個(gè)Master。

步驟

  1. 在Master對(duì)應(yīng)redis.conf同目錄下新建sentinel.conf文件,名字絕對(duì)不能錯(cuò);

  2. 配置哨兵,在sentinel.conf文件中填入內(nèi)容(可以配置多個(gè)):

#說明:最后一個(gè)數(shù)字1,表示主機(jī)掛掉后slave投票看讓誰(shuí)接替成為主機(jī),得票數(shù)多少后成為主機(jī)。 
sentinel monitor 被監(jiān)控?cái)?shù)據(jù)庫(kù)名字(自己起名字) ip port 1
sentinel monitor mymaster 127.0.0.1 6379 1

在某個(gè)路徑下啟動(dòng)哨兵模式(路徑按照自己的需求進(jìn)行配置):

redis-sentinel  /myRedis/sentinel.conf

Redis集群

安裝ruby環(huán)境

可能出現(xiàn)版本過低問題,可參考Linux中安裝ruby、redis requires Ruby version >= 2.2.2 系統(tǒng)默認(rèn) ruby 版本過低,導(dǎo)致 Redis 接口安裝失敗

yum install ruby
yum install rubygems

配置文件

1. 創(chuàng)建文件

  • 一個(gè)集群至少要有三個(gè)主節(jié)點(diǎn),即要有六個(gè)節(jié)點(diǎn)。
  • 分配原則盡量保證每個(gè)主數(shù)據(jù)庫(kù)運(yùn)行在不同的ip地址,每個(gè)從庫(kù)和主庫(kù)不在一個(gè)ip地址。
  • 當(dāng)主節(jié)點(diǎn)崩了,從節(jié)點(diǎn)能自動(dòng)升為主節(jié)點(diǎn);當(dāng)主節(jié)點(diǎn)再次恢復(fù)時(shí),主節(jié)點(diǎn)變?yōu)閟lave。參考哨兵模式。
  • 不在同一個(gè)slot下的鍵值,不能使用mset、mget等操作。
image.png

2. 每個(gè)文件的配置內(nèi)容
需要修改數(shù)字部分

include /home/huzh/myRedis/redis.conf
port 6379
pidfile /var/run/redis_6379.pid
dbfilename dump6379.rdb
cluster-enabled yes
cluster-config-file nodes-6379.conf
cluster-node-timeout 15000

redis.conf中的參數(shù)

# 只有所有slot插槽都正常的時(shí)候才對(duì)外提供服務(wù),默認(rèn)為yes
# cluster-require-full-coverage yes

3. 將六個(gè)節(jié)點(diǎn)合成一個(gè)集群
首先進(jìn)入nginx安裝目錄,即解壓目錄/home/huzh/redis-3.2.5/src。使用真實(shí)ip 和端口

cd /home/huzh/redis-3.2.5/src

# --replicas 1 表示為集群的每個(gè)主節(jié)點(diǎn)創(chuàng)建一個(gè)從節(jié)點(diǎn)
./redis-trib.rb create --replicas 1 192.168.118.128:6379 192.168.118.128:6380 192.168.118.128:6381 192.168.118.128:6389 192.168.118.128:6390 192.168.118.128:6391

4. 命令

cluster nodes    #查看集群信息
redis-cli -p 端口    #會(huì)報(bào)錯(cuò)
redis-cli -c -p 端口    #可以實(shí)現(xiàn)重定向

可以通過{}來定義組的概念,從而使key中{}內(nèi)相同內(nèi)容的鍵值對(duì)放到一個(gè)slot中去。

set user:{info}:name xxx 
set age{info} 12 
set {info}email 12345@qq.com 
hset user{info} name jiang 
hset user{info} age 19 
hset user{info} eamil 12345@qq.com

參考內(nèi)容

Redis簡(jiǎn)介
CentOs7 搭建基于最新版 Redis 集群環(huán)境之圖文詳解

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容