麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 數據庫 > Redis > 正文

redis快照模式_動力節點Java學院整理

2020-03-17 12:36:58
字體:
來源:轉載
供稿:網友

我們知道redis是帶有持久化這個能力了,那到底持久化成到哪里,持久化成啥樣呢???這篇我們一起來尋求答案。

一、快照模式

  或許在用Redis之初的時候,就聽說過redis有兩種持久化模式,第一種是SNAPSHOTTING模式,還是一種是AOF模式,而且在實戰場景下用的最多的莫過于SNAPSHOTTING模式,這個不需要反駁吧,而且你可能還知道,使用SNAPSHOTTING模式,需要在redis.conf中設置配置參數,比如下面這樣:

# Save the DB on disk:## save <seconds> <changes>## Will save the DB if both the given number of seconds and the given# number of write operations against the DB occurred.## In the example below the behaviour will be to save:# after 900 sec (15 min) if at least 1 key changed# after 300 sec (5 min) if at least 10 keys changed# after 60 sec if at least 10000 keys changed## Note: you can disable saving completely by commenting out all "save" lines.## It is also possible to remove all the previously configured save# points by adding a save directive with a single empty string argument# like in the following example:## save ""save 900 1save 300 10save 60 10000

上面三組命令也是非常好理解的,就是說900指的是“秒數”,1指的是“change次數”,接下來如果在“900s“內有1次更改,那么就執行save保存,同樣的道理,如果300s內有10次change,60s內有1w次change,那么也會執行save操作,就這么簡單,看了我剛才說了這么幾句話,是不是有種直覺在

告訴你,有兩個問題是不是要澄清一下:

1. 上面這個操作應該是redis自身進行的同步操作,請問是否可以手工執行save呢? 

當然可以進行手工操作,redis提供了兩個操作命令:save,bgsave,這兩個命令都會強制將數據刷新到硬盤中,如下圖:

redis,快照模式

2. 看上面的圖,貌似bgsave是開啟單獨線程的,請問是嗎?

確實如你所說,bgsave是開啟次線程進行數據刷新的,不信的話我們來看看代碼,它的代碼是在rdb.c源文件中,如下:

redis,快照模式

從上面的代碼中,有沒有看到一個重點,那就是fork方法,它就是一些牛人口中說的什么fork出一個線程,今天你也算終于看到了,其實redis并不是單純的單線程服務,至少fork告訴我們,它在一些場景下也是會開啟工作線程的,然后可以看到代碼會在工作線程中執行同步的bgsave操作,就這么簡單。

3. 能簡單說下saveparams參數在redis源碼中的邏輯嗎?

可以的,其實在redis中有一個周期性函數,叫做serverCron,它會周期性啟動,大概會做七件事情,如redis注釋所說:

/* This is our timer interrupt, called server.hz times per second. * Here is where we do a number of things that need to be done asynchronously. * For instance: * * - Active expired keys collection (it is also performed in a lazy way on * lookup). * - Software watchdog. * - Update some statistic. * - Incremental rehashing of the DBs hash tables. * - Triggering BGSAVE / AOF rewrite, and handling of terminated children. * - Clients timeout of different kinds. * - Replication reconnection. * - Many more... * * Everything directly called here will be called server.hz times per second, * so in order to throttle execution of things we want to do less frequently * a macro is used: run_with_period(milliseconds) { .... } */int serverCron(struct aeEventLoop *eventLoop, long long id, void *clientData) {

上面的紅色字體就是做了我們所關心的save操作,看過方法的注釋,接下來我們來找一下具體邏輯。

redis,快照模式

從上面這段代碼邏輯,你應該可以發現以下幾點:

<1>.saveparams參數是在server對象下面,而server對象正好是redisServer類型,如下圖:

redis,快照模式

從上面圖中 *saveparams 的注釋上來看,你應該知道*saveparams是saveparam類型的數組,那現在是不是有強烈的好奇心想看一下saveparam

類型是怎么定義的的呢??? 如下圖:

redis,快照模式

可以看到,saveparam參數里面有兩個參數,seconds就是保存秒數,changes就是改變量,而這二個參數就對應著我們配置文件中的900 0 這樣的配置。

<2> 然后我們通過if發現,如果終滿足,就會最終調用rdbSaveBackground來持久化我們的rdb文件。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Redis頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 天天鲁在线视频免费观看 | 欧洲狠狠鲁 | 久久国产28 | 精品久久久久久综合日本 | 久久综合给合久久狠狠狠97色69 | 轻点插视频 | 精品国产一区二区三 | 在线播放一区二区三区 | 欧美不卡 | 亚洲成人在线视频网站 | 欧美一级成人 | 一区二区三区日韩精品 | 一级在线 | 久久国产不卡 | 色中色激情影院 | 精品亚洲午夜久久久久91 | 亚洲网站免费 | 久久超| 高清国产免费 | 久久99精品久久久久久青青日本 | www中文在线| 一级毛片在线免费观看视频 | 国产三级三级三级三级 | 韩毛片| 国产精品成人一区二区三区吃奶 | 2019天天干夜夜操 | 偿还电影免费 | 欧美日韩在线免费观看 | 日日影视| 成人免费av在线播放 | 欧美一级特黄a | 草莓福利视频在线观看 | 国产无遮挡一区二区三区毛片日本 | 91在线色| 2021免费日韩视频网 | 成人羞羞视频在线观看免费 | 亚洲乱操 | 久久一本日日摸夜夜添 | 小情侣嗯啊哦视频www | 成人福利在线免费观看 | 91久久国产露脸精品国产 |