欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

redis快照模式_動力節(jié)點Java學(xué)院整理

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

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

一、快照模式

  或許在用Redis之初的時候,就聽說過redis有兩種持久化模式,第一種是SNAPSHOTTING模式,還是一種是AOF模式,而且在實戰(zhàn)場景下用的最多的莫過于SNAPSHOTTING模式,這個不需要反駁吧,而且你可能還知道,使用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

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

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

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

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

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

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

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

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

可以的,其實在redis中有一個周期性函數(shù),叫做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) {

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

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

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

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

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

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

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

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

相關(guān)文章

  • Redis過期事件監(jiān)聽器的完整實現(xiàn)步驟

    Redis過期事件監(jiān)聽器的完整實現(xiàn)步驟

    要使用 Redis 過期事件監(jiān)聽器來更新數(shù)據(jù)庫狀態(tài),我們需要確保 Redis 的事件通知已啟用,并實現(xiàn)監(jiān)聽器來捕獲過期的鍵,并根據(jù)需要更新數(shù)據(jù)庫,本文給大家介紹了Redis過期事件監(jiān)聽器的完整實現(xiàn)步驟,需要的朋友可以參考下
    2024-10-10
  • 淺談我是如何用redis做實時訂閱推送的

    淺談我是如何用redis做實時訂閱推送的

    這篇文章主要介紹了淺談我是如何用redis做實時訂閱推送的,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Redis中緩存和數(shù)據(jù)庫雙寫數(shù)據(jù)不一致的原因及解決方案

    Redis中緩存和數(shù)據(jù)庫雙寫數(shù)據(jù)不一致的原因及解決方案

    這篇文章主要介紹了Redis中緩存和數(shù)據(jù)庫雙寫數(shù)據(jù)不一致的原因及解決方案,文中通過圖文結(jié)合的方式講解的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-03-03
  • k8s部署redis哨兵的實現(xiàn)

    k8s部署redis哨兵的實現(xiàn)

    本文主要介紹了k8s部署redis哨兵的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • 詳解Redis Stream做消息隊列

    詳解Redis Stream做消息隊列

    這篇文章主要介紹了詳解Redis Stream做消息隊列,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-09-09
  • 一文搞懂Redis最常用String字符串技能

    一文搞懂Redis最常用String字符串技能

    想要一文搞懂Redis最常用字符串技能?你來對地方了,這篇指南將帶你深入淺出,輕松掌握Redis字符串的強大功能,別眨眼,跟我們一起,讓數(shù)據(jù)操作變得前所未有的簡單,需要的朋友可以參考下
    2024-03-03
  • 本地訪問不到公網(wǎng)redis的解決方案

    本地訪問不到公網(wǎng)redis的解決方案

    本文詳述了本地訪問不到公網(wǎng)redis的解決方案,包括分析報錯原因、Redis配置文件的區(qū)別、bind和protected-mode配置的解析,最終通過修改Redis配置文件及創(chuàng)建啟動腳本解決了訪問不到公網(wǎng)redis得問題,需要的朋友可以參考下
    2024-08-08
  • Redis分布式鎖之紅鎖的實現(xiàn)

    Redis分布式鎖之紅鎖的實現(xiàn)

    在Redis中,紅鎖是一種分布式鎖的實現(xiàn)機制,旨在解決多個客戶端在分布式環(huán)境中對共享資源進(jìn)行并發(fā)訪問的問題,本文主要介紹了Redis分布式鎖之紅鎖的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2023-12-12
  • Redis數(shù)據(jù)結(jié)構(gòu)類型示例解析

    Redis數(shù)據(jù)結(jié)構(gòu)類型示例解析

    這篇文章主要為大家介紹了Redis數(shù)據(jù)結(jié)構(gòu)類型示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • Redis類型type與編碼encoding原理及使用示例

    Redis類型type與編碼encoding原理及使用示例

    這篇文章主要為大家介紹了Redis類型type與編碼encoding原理及使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03

最新評論