国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

Redis (三 redis的事務和主從同步)

2019-11-14 10:50:59
字體:
供稿:網(wǎng)友

multi   進入事務模式

discard   取消事務

exec   執(zhí)行事務

注意:Redis只能保證事務內(nèi)的命令可以按順序執(zhí)行,并不能在有命令執(zhí)行失敗時,可以回滾

multi命令為客戶端添加事務處理的標識,redis便將接下來的命令放到命令隊列

##持久化,

redis是內(nèi)存數(shù)據(jù)庫,斷電消失,為了彌補,提供了持久化操作:內(nèi)存快照和日志追加Append-only file

內(nèi)存快照是把內(nèi)存中的數(shù)據(jù)以快照的形式寫入二進制文件,默認文件名dump.rdb

客戶端通過save或bgsave告訴服務端保存快照

save在主線程保存快照,由于redis是單線程,所以會阻塞其它客戶端請求,所以最好不要用save

save 是每次保存完整數(shù)據(jù),而不是增量數(shù)據(jù)

save <seconds> <changes> eg: save 900  300表示過900s或者修改300次就保存一次

aof日志追加是把增加,修改數(shù)據(jù)的命令通過write函數(shù)保存到文件尾,默認appendonly.aof

重啟時讀取文件寫入內(nèi)存,日志追加方式可以有效的降低數(shù)據(jù)丟失的風險,但持久化文件大小會不斷膨脹

,例如調(diào)用100次incr nums命令,就會保存100條incr nums,其實,99條是多余的,直接set nums 100就可以了

為了壓縮日志文件,redis提供了,bgwriteaof命令,redis收到這個命令就會適應類似于內(nèi)存快照的方式將內(nèi)存的數(shù)據(jù)以命令的方式保存到臨時文件,最后替換原來的文件

##主從同步

master可以有多個slave

slave不會阻塞master

master上禁止使用數(shù)據(jù)持久化,只在從庫上進行

設置完主從同步,slave主動連接master,發(fā)送sync命令,master啟動一個后臺進程,將內(nèi)存數(shù)據(jù)以快照形式寫入文件中,同時開始收集新的寫命令并緩存起來,master后臺完成內(nèi)存快照后,發(fā)數(shù)據(jù)文件發(fā)給slave,后續(xù)master收到的寫命令都通過開始建立的連接發(fā)送給salve,master收到多個slave的連接請求時,只啟動一個進程寫數(shù)據(jù)庫鏡像,然后發(fā)送給所有的slave

即:

(1)slave主動連接master

(2)slave發(fā)送sync命令到master

(3)master備份數(shù)據(jù)到rdb文件

(4)master把rdb文件傳送到slave

(5)slave清空數(shù)據(jù)庫數(shù)據(jù),把rdb文件數(shù)據(jù)導入

接下來master把用戶的更改或者添加操作,用命令的形式直接發(fā)送給slave

redis主從配置:slaveof  192.168.1.1 6379

### slave端的工作流程:

syncWithMaster調(diào)用anetTcpConnect連接到master服務器,發(fā)送sync命令到master服務器,發(fā)送sync命令到master服務器請求同步操作,調(diào)用aeCreateFileEvent監(jiān)聽master是否可讀,如果是可讀狀態(tài),調(diào)用readSyncBulkPayload函數(shù)從master服務器處讀取數(shù)據(jù),最后設置slave服務器的同步狀態(tài)為REDIS_REPL_TRANSFER,表示正在從master讀取數(shù)據(jù)

readSyncBulkPayload從master服務器處讀取內(nèi)存快照文件(rdb文件)數(shù)據(jù),并保存到本地文件導入數(shù)據(jù)庫

### master端的工作流程:

注意點:如果該服務器同時是master和slave,必須等待slave端工作完畢才能進入master

sync主要是發(fā)起一個內(nèi)存快照的備份,如果此時正在執(zhí)行備份,就要判斷改操作是否由其它slave發(fā)起,是的話,不必發(fā)起備份,否則就要等此次備份完成后發(fā)起新的內(nèi)存快照備份,如果此時沒有正在備份,則發(fā)起內(nèi)存快照的備份,備份完成后,master服務器調(diào)用backgroundSaveDoneHandler函數(shù)進行后續(xù)工作,并且調(diào)用updateSlaveWaittingBgsave進行下一步同步工作,update函數(shù)會便利slave列表,為每一個slave創(chuàng)建一個寫事件,事件回調(diào)函數(shù)為sendBulkToSlave,如果有slave需要發(fā)起一個新的內(nèi)存快照備份,把startbgsave設置為1調(diào)用rdbSaveBackGround發(fā)起新的備份工作

sendBulkToSlave負責把內(nèi)存快照文件發(fā)送給slave

文件發(fā)送到slave后,第一步完成,同步流程的第二步:

master把客戶端發(fā)送過來的命令轉(zhuǎn)發(fā)給slave,實現(xiàn)同步


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 阜城县| 临邑县| 阿图什市| 旺苍县| 高阳县| 西昌市| 德昌县| 雅安市| 徐汇区| 宜丰县| 东乌珠穆沁旗| 浮山县| 雷山县| 阿荣旗| 北票市| 桂平市| 新泰市| 辉南县| 安龙县| 济源市| 土默特右旗| 榕江县| 雅江县| 湄潭县| 建昌县| 隆德县| 青浦区| 闽清县| 大英县| 安远县| 辉南县| 河东区| 杨浦区| 交城县| 桐城市| 晋州市| 石河子市| 长丰县| 黑河市| 内丘县| 高邑县|