久天啪天天久久99久久,在线a亚洲老鸭窝天堂新地址,国产成人精品无码一区二区老年人,高h黄暴np辣h调教性奴,欧美老熟妇乱子伦牲交视频

Redis高可用高性能緩存的應(yīng)用系列2 - 事務(wù)機(jī)制和IO多路復(fù)用、持久化

來源:騰訊云 發(fā)布:2023-04-10 20:40:17

概述

Redis高可用高性能緩存的應(yīng)用系列的第二篇,主要介紹Redis事務(wù)機(jī)制和IO多路復(fù)用、和持久化的知識(shí)點(diǎn)。


(相關(guān)資料圖)

Redis事務(wù)機(jī)制

Redis事務(wù)機(jī)制,和Mysql有大的不同,分為4步進(jìn)行執(zhí)行:

1.事務(wù)提交前,先檢查命令語法是否正確2.提交命令后,一定會(huì)被執(zhí)行3.有命令報(bào)錯(cuò)也會(huì)執(zhí)行完4.不能回滾

Redis事務(wù)和批量操作的區(qū)別:Redis在執(zhí)行exec時(shí),命令要么執(zhí)行,要么都不執(zhí)行,批量操作不會(huì)檢查語法。

Redis事務(wù)命令說明:

multi:告訴Redis開啟一個(gè)事務(wù)(注意只是開啟,而不是執(zhí)行)exec: 告訴Redis開始執(zhí)行事務(wù)discard:告訴Redis取消事務(wù)watch:監(jiān)視某一個(gè)鍵值對(duì),它的作用是在事務(wù)執(zhí)行之前,如果監(jiān)視的鍵值被修改,事務(wù)會(huì)被取消

當(dāng)執(zhí)行multi命令后,表明Redis開啟一個(gè)事務(wù),在執(zhí)行后續(xù)的命令都屬于在排隊(duì)中,執(zhí)行exec命令時(shí),Redis事務(wù)的命令要么全部執(zhí)行,要么全不執(zhí)行。

redis-cli> set name "stark"OKredis-cli> multiOKredis-cli> set name "stark張宇"QUEUEDredis-cli> set age 33QUEUEDredis-cli> exec1) OK2) OK

如果因?yàn)閳?zhí)行的命令語法錯(cuò)誤,整個(gè)Redis的事務(wù)會(huì)被服務(wù)駁回,全部不執(zhí)行。

redis-cli> multiOKredis-cli> set name "stark張宇"QUEUEDredis-cli> lpop "changchang" "quanquan" "xiaoshenyang"QUEUEDredis-cli> exec(error) wrong number of arguments (given 3, expected 1)

如果語法沒有錯(cuò)誤,在執(zhí)行過程中數(shù)據(jù)有錯(cuò)誤拋出,Redis也會(huì)全部執(zhí)行,只要語法正確,命令都會(huì)被執(zhí)行。

redis-cli> multiOKredis-cli> set name "stark張宇"QUEUEDredis-cli> lpop nameQUEUEDredis-cli> exec1) OK2) WRONGTYPE Operation against a key holding the wrong kind of value

I/O多路復(fù)用

首先要說明一點(diǎn),redis采用單線程處理請(qǐng)求, 假設(shè)服務(wù)器是4核的CPU,只會(huì)占用一個(gè),其他3個(gè)都不進(jìn)行參與,在線程處理上是并行的。

Redis 6.0版本后對(duì)這里進(jìn)行了優(yōu)化,使用了I/O thread概念,Redis 6.0的主進(jìn)程只做計(jì)算,不在參與讀寫操作,I/O thread 處理上都是并行的關(guān)系,充分利用了多核CPU的優(yōu)勢(shì),節(jié)省了處理時(shí)間,提升了處理請(qǐng)求的性能。

持久化

Redis的數(shù)據(jù)是保存在內(nèi)存中的,所以當(dāng)服務(wù)器重啟時(shí)會(huì)造成數(shù)據(jù)丟失,Redis提供了數(shù)據(jù)持久化方案,把數(shù)據(jù)保存到磁盤上,使用文件恢復(fù)數(shù)據(jù),主要有3種持久化方式:

rdb : 生成某一時(shí)刻的快照,然后保存在二進(jìn)制文件中aof :記錄每一條命令,追加到文件中,打開可以看到具體的操作記錄混合模式:它是上面兩種方式的結(jié)合手動(dòng)觸發(fā)save ,會(huì)讓Redis處于阻塞狀態(tài),直到rdb持久化完成,線上環(huán)境要謹(jǐn)慎使用bgsave ,它會(huì)fork出一個(gè)子進(jìn)程,用來執(zhí)行持久化,主進(jìn)程繼續(xù)響應(yīng)客戶端請(qǐng)求,它會(huì)有短暫的阻塞

2.自動(dòng)觸發(fā)

在m秒內(nèi),執(zhí)行命令最終執(zhí)行的是bgsave

bgsave的執(zhí)行過程:1)首先,redis主進(jìn)程fork出子進(jìn)程,2)子進(jìn)程會(huì)共享子進(jìn)程的數(shù)據(jù),并把主進(jìn)程設(shè)置成read only,然后開始執(zhí)行持久化的操作,當(dāng)有新命令要修改數(shù)據(jù)時(shí),Redis采用寫實(shí)復(fù)制的方法來解決數(shù)據(jù)不一致的問題。

rdb持久化的優(yōu)缺點(diǎn):

優(yōu)點(diǎn):

容災(zāi)性好,方便備份性能最大化,fork出一個(gè)子進(jìn)程來操作,對(duì)主進(jìn)程沒有影響數(shù)據(jù)比較多時(shí),相對(duì)于aof啟動(dòng)效率比較高

缺點(diǎn):

假如中間發(fā)生故障,故障期間會(huì)造成數(shù)據(jù)丟失

Aof同步策略

appendfsync everysec 每秒同步一次,默認(rèn)是每秒同步一次appendfsync always 每次操作后要同步一次appendfsync no 由操作系統(tǒng)進(jìn)行調(diào)度

Aof的重寫策略:因?yàn)樵赗edis操作的過程中有很多命令都是對(duì)同一個(gè)key進(jìn)行操作,會(huì)造成大量的命令重復(fù),造成Aof文件過大,而整理出的解決方案。

手動(dòng)觸發(fā),執(zhí)行bgrewriteaof命令自動(dòng)觸發(fā)

auto-aof-rewrit-precentage:當(dāng)前Aof文件大小和最后一次重寫后的大小之間的比率等于或者是等于指定的增長(zhǎng)百分比,如100是代表當(dāng)前Aof文件是上次重寫的兩倍時(shí)候才重寫的。

auto-aof-rewrit-mini-size:當(dāng)Aof文件大小大于該值時(shí)候才可能重寫。

優(yōu)點(diǎn):數(shù)據(jù)安全,不會(huì)造成數(shù)據(jù)的丟失

缺點(diǎn):比rdb重啟效率低,運(yùn)行效率比rdb低

關(guān)鍵詞:
相關(guān)新聞