最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

redis快照模式_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

 更新時(shí)間:2017年08月28日 11:20:16   作者:huangxincheng  
這篇文章主要為大家詳細(xì)介紹了redis快照模式的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

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

一、快照模式

  或許在用Redis之初的時(shí)候,就聽(tīng)說(shuō)過(guò)redis有兩種持久化模式,第一種是SNAPSHOTTING模式,還是一種是AOF模式,而且在實(shí)戰(zhàn)場(chǎng)景下用的最多的莫過(guò)于SNAPSHOTTING模式,這個(gè)不需要反駁吧,而且你可能還知道,使用SNAPSHOTTING模式,需要在redis.conf中設(shè)置配置參數(shù),比如下面這樣:

# 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 1
save 300 10
save 60 10000

上面三組命令也是非常好理解的,就是說(shuō)900指的是“秒數(shù)”,1指的是“change次數(shù)”,接下來(lái)如果在“900s“內(nèi)有1次更改,那么就執(zhí)行save保存,同樣的道理,如果300s內(nèi)有10次change,60s內(nèi)有1w次change,那么也會(huì)執(zhí)行save操作,就這么簡(jiǎn)單,看了我剛才說(shuō)了這么幾句話,是不是有種直覺(jué)在

告訴你,有兩個(gè)問(wèn)題是不是要澄清一下:

1. 上面這個(gè)操作應(yīng)該是redis自身進(jìn)行的同步操作,請(qǐng)問(wèn)是否可以手工執(zhí)行save呢? 

當(dāng)然可以進(jìn)行手工操作,redis提供了兩個(gè)操作命令:save,bgsave,這兩個(gè)命令都會(huì)強(qiáng)制將數(shù)據(jù)刷新到硬盤中,如下圖:

2. 看上面的圖,貌似bgsave是開(kāi)啟單獨(dú)線程的,請(qǐng)問(wèn)是嗎?

確實(shí)如你所說(shuō),bgsave是開(kāi)啟次線程進(jìn)行數(shù)據(jù)刷新的,不信的話我們來(lái)看看代碼,它的代碼是在rdb.c源文件中,如下:

從上面的代碼中,有沒(méi)有看到一個(gè)重點(diǎn),那就是fork方法,它就是一些牛人口中說(shuō)的什么fork出一個(gè)線程,今天你也算終于看到了,其實(shí)redis并不是單純的單線程服務(wù),至少fork告訴我們,它在一些場(chǎng)景下也是會(huì)開(kāi)啟工作線程的,然后可以看到代碼會(huì)在工作線程中執(zhí)行同步的bgsave操作,就這么簡(jiǎn)單。

3. 能簡(jiǎn)單說(shuō)下saveparams參數(shù)在redis源碼中的邏輯嗎?

可以的,其實(shí)在redis中有一個(gè)周期性函數(shù),叫做serverCron,它會(huì)周期性啟動(dòng),大概會(huì)做七件事情,如redis注釋所說(shuō):

/* 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) {

上面的紅色字體就是做了我們所關(guān)心的save操作,看過(guò)方法的注釋,接下來(lái)我們來(lái)找一下具體邏輯。

從上面這段代碼邏輯,你應(yīng)該可以發(fā)現(xiàn)以下幾點(diǎn):

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

從上面圖中 *saveparams 的注釋上來(lái)看,你應(yīng)該知道*saveparams是saveparam類型的數(shù)組,那現(xiàn)在是不是有強(qiáng)烈的好奇心想看一下saveparam

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

可以看到,saveparam參數(shù)里面有兩個(gè)參數(shù),seconds就是保存秒數(shù),changes就是改變量,而這二個(gè)參數(shù)就對(duì)應(yīng)著我們配置文件中的900 0 這樣的配置。

<2> 然后我們通過(guò)if發(fā)現(xiàn),如果終滿足,就會(huì)最終調(diào)用rdbSaveBackground來(lái)持久化我們的rdb文件。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Redis實(shí)現(xiàn)排行榜及相同積分按時(shí)間排序功能的實(shí)現(xiàn)

    Redis實(shí)現(xiàn)排行榜及相同積分按時(shí)間排序功能的實(shí)現(xiàn)

    這篇文章主要介紹了Redis實(shí)現(xiàn)排行榜及相同積分按時(shí)間排序,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-08-08
  • Linux Redis 的安裝步驟詳解

    Linux Redis 的安裝步驟詳解

    這篇文章主要介紹了 Linux Redis 的安裝步驟詳解的相關(guān)資料,希望大家通過(guò)本文能掌握如何安裝Redis,需要的朋友可以參考下
    2017-08-08
  • 一篇文章帶你弄清楚Redis的精髓

    一篇文章帶你弄清楚Redis的精髓

    Redis是一個(gè)開(kāi)源的、支持網(wǎng)絡(luò)、基于內(nèi)存的鍵值對(duì)存儲(chǔ)系統(tǒng),它可以用作數(shù)據(jù)庫(kù)、緩存和消息中間件。它支持多種數(shù)據(jù)類型,包括字符串、散列、列表、集合、位圖等,擁有極快的讀寫速度,并且支持豐富的特性,如事務(wù)、持久化、復(fù)制、腳本、發(fā)布/訂閱等。
    2023-02-02
  • Redis實(shí)現(xiàn)RBAC權(quán)限管理

    Redis實(shí)現(xiàn)RBAC權(quán)限管理

    本文主要介紹了Redis實(shí)現(xiàn)RBAC權(quán)限管理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-03-03
  • 分布式鎖為什么要選擇Zookeeper而不是Redis?看完這篇你就明白了

    分布式鎖為什么要選擇Zookeeper而不是Redis?看完這篇你就明白了

    Zookeeper的機(jī)制可以保證分布式鎖實(shí)現(xiàn)業(yè)務(wù)代碼簡(jiǎn)單,成本低,Redis如果要解決分布式鎖的問(wèn)題,對(duì)于一些復(fù)雜的情況,很難解決,成本較高,這篇文章重點(diǎn)給大家介紹分布式鎖選擇Zookeeper 而不是Redis的理由,一起看看吧
    2021-05-05
  • 詳解Redis中的雙鏈表結(jié)構(gòu)

    詳解Redis中的雙鏈表結(jié)構(gòu)

    這篇文章主要介紹了Redis中的雙鏈表結(jié)構(gòu),包括listNode結(jié)構(gòu)的API,需要的朋友可以參考下
    2015-08-08
  • Redis教程(九):主從復(fù)制配置實(shí)例

    Redis教程(九):主從復(fù)制配置實(shí)例

    這篇文章主要介紹了Redis教程(九):主從復(fù)制配置實(shí)例,本文講解了Redis的Replication、Replication的工作原理、如何配置Replication、應(yīng)用示例等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • Linux中設(shè)置Redis開(kāi)機(jī)啟動(dòng)的方法

    Linux中設(shè)置Redis開(kāi)機(jī)啟動(dòng)的方法

    這篇文章主要給大家介紹了關(guān)于Linux中設(shè)置Redis開(kāi)機(jī)啟動(dòng)的方法,主要包括在CentOS7.0系統(tǒng)和Debian 8.0系統(tǒng)下實(shí)現(xiàn)方法,文中介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-04-04
  • 利用Redis?lua實(shí)現(xiàn)高效讀寫鎖的代碼實(shí)例

    利用Redis?lua實(shí)現(xiàn)高效讀寫鎖的代碼實(shí)例

    這篇文章給大家介紹了如何利用Redis?lua實(shí)現(xiàn)高效的讀寫鎖,讀寫鎖的好處就是能幫助客戶讀到的數(shù)據(jù)一定是最新的,寫鎖是排他鎖,而讀鎖是一個(gè)共享鎖,需要的朋友可以參考下
    2024-01-01
  • ?Redis 串行生成順序編碼的方法實(shí)現(xiàn)

    ?Redis 串行生成順序編碼的方法實(shí)現(xiàn)

    本文主要介紹了?Redis 串行生成順序編碼的方法實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04

最新評(píng)論

安泽县| 财经| 千阳县| 衡阳市| 河间市| 嘉荫县| 阿克苏市| 乌拉特中旗| 平江县| 商洛市| 莱州市| 保靖县| 安溪县| 安图县| 雷州市| 武夷山市| 芮城县| 马边| 石嘴山市| 太保市| 洛川县| 五原县| 墨脱县| 张家界市| 陵水| 奇台县| 安义县| 罗定市| 民丰县| 思南县| 堆龙德庆县| 雷波县| 龙胜| 额济纳旗| 胶州市| 铜陵市| 蓬莱市| 图们市| 大兴区| 克什克腾旗| 濉溪县|