redis備份
redis有兩種備份方式:RDB AOF
RDB:這種方式是redis主進(jìn)程fork一個(gè)子進(jìn)程將內(nèi)存數(shù)據(jù)dump到一個(gè)臨時(shí)的RDB文件,在寫入完畢后替換之前的RDB文件
AOF:這種方式是redis在接收寫入命令的時(shí)候,不斷append aof文件。當(dāng)文件到達(dá)一定大小的時(shí)候進(jìn)行壓縮,壓縮是對(duì)當(dāng)前內(nèi)存的數(shù)據(jù)整合成若干命令,同時(shí)對(duì)壓縮過程中接收的命令進(jìn)行緩存,在壓縮結(jié)束后對(duì)緩存中的命令進(jìn)行append
優(yōu)缺點(diǎn)
RDB數(shù)據(jù)恢復(fù)快 但是容易丟失數(shù)據(jù) 同步的時(shí)候如果文件特別大 容易卡頓
AOF數(shù)據(jù)完整 但是數(shù)據(jù)恢復(fù)慢
redis主從同步
主從同步分為:全量同步 增量同步
全量同步:一般發(fā)生在slave初始化的時(shí)候,會(huì)發(fā)送一個(gè)sync命令給master,master接收到命令的時(shí)候fork一個(gè)子進(jìn)程進(jìn)行rdb操作,在RBD結(jié)束之后循環(huán)所有的slave 把RDB數(shù)據(jù)發(fā)送給它們。
增量同步:在master接收寫命令同步給slave。
redis集群原理
redis集群包括兩個(gè)東西。一個(gè)是solt 一個(gè)是cluster,首先集群啟動(dòng)的時(shí)候會(huì)給16384個(gè)solt分配節(jié)點(diǎn)。為什么是16384個(gè)槽,因?yàn)橐粋€(gè)槽代表1bit 8bit*1024 =2kb,設(shè)計(jì)者認(rèn)為集群的最大節(jié)點(diǎn)不超過100 所以一個(gè)節(jié)點(diǎn)用163個(gè)槽是足夠的,并且2kb的心跳包能接受。當(dāng)我們有key過來時(shí) 先通過crc16算法得到一個(gè)結(jié)果然后對(duì)16384求余,得到該key的節(jié)點(diǎn)信息寫入。集群里面的節(jié)點(diǎn)是通過心跳連接保持通信的。如果有一半的節(jié)點(diǎn)認(rèn)為一個(gè)主節(jié)點(diǎn)掛了,那么它的slave節(jié)點(diǎn)中選舉一個(gè)擔(dān)任master。