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

首頁 > 學院 > 開發設計 > 正文

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

2019-11-14 11:46:28
字體:
來源:轉載
供稿:網友

multi   進入事務模式

discard   取消事務

exec   執行事務

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

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

##持久化,

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

內存快照是把內存中的數據以快照的形式寫入二進制文件,默認文件名dump.rdb

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

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

save 是每次保存完整數據,而不是增量數據

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

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

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

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

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

##主從同步

master可以有多個slave

slave不會阻塞master

master上禁止使用數據持久化,只在從庫上進行

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

即:

(1)slave主動連接master

(2)slave發送sync命令到master

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

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

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

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

redis主從配置:slaveof  192.168.1.1 6379

### slave端的工作流程:

syncWithMaster調用anetTcpConnect連接到master服務器,發送sync命令到master服務器,發送sync命令到master服務器請求同步操作,調用aeCreateFileEvent監聽master是否可讀,如果是可讀狀態,調用readSyncBulkPayload函數從master服務器處讀取數據,最后設置slave服務器的同步狀態為REDIS_REPL_TRANSFER,表示正在從master讀取數據

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

### master端的工作流程:

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

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

sendBulkToSlave負責把內存快照文件發送給slave

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

master把客戶端發送過來的命令轉發給slave,實現同步


上一篇:http基礎教程

下一篇:xml數據二級聯動

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 新巴尔虎右旗| 溆浦县| 永清县| 边坝县| 辉县市| 墨竹工卡县| 恩施市| 阿拉善盟| 武安市| 临夏市| 红桥区| 大英县| 育儿| 延长县| 大兴区| 普定县| 莱芜市| 礼泉县| 湖口县| 达孜县| 朝阳区| 清河县| 深水埗区| 乌海市| 辛集市| 徐汇区| 阿尔山市| 叶城县| 清镇市| 尤溪县| 阜南县| 合阳县| 孟津县| 汉源县| 左权县| 大港区| 江西省| 扬中市| 车致| 湘乡市| 吴江市|