redis原理分析

来源:http://www.cnblogs.com/suyuan1573/archive/2016/11/20/6083289.html
-Advertisement-
Play Games

基本全是參考http://blog.csdn.net/a600423444/article/details/8944601 redis的使用大家都很熟悉,可能除了watch 鎖,pipeline,訂閱發佈用的少點,不過網上也有大量的教材和例子,這裡想聊聊redis中的一些原理。 1.redis 提供 ...


基本全是參考http://blog.csdn.net/a600423444/article/details/8944601     redis的使用大家都很熟悉,可能除了watch 鎖,pipeline,訂閱發佈用的少點,不過網上也有大量的教材和例子,這裡想聊聊redis中的一些原理。   1.redis 提供了兩種持久化方式,一種是RDB,一種是AOF; RDB 是指在制定的時間間隔生成數據集的快照, AOF持久化記錄伺服器執行的所有寫命令,併在伺服器重啟時,重新執行這些命令來恢複數據   2.redis 啟動過程 -(1)初始化伺服器變數,設置伺服器預設配置 -(2)讀取配置文件的配置,覆蓋預設配置 -(3)初始化伺服器功能模塊 -(4)從RDB或者AOF中重載數據 -(5)網路監聽前的準備工作 -(6)開啟事件監聽,迴圈接受客戶端請求  

 

3.redis持久化方案分析 (1)RDB持久化 將記憶體中的數據快照保持到磁碟中,redis重啟的時候重新載入RDB文件來還原資料庫。 a)RDB 保存  如果已經存在RDB文件,會用新文件替換舊文件, 在保存RDB的過程中,redis主進程阻塞,無法響應客戶端請求。 為了避免阻塞主線程,redis提供了rdbSaveBackground函數,新建子進程調用RDB save,完成RDB保存後再發生消息通知主進程。在此期間主進程可以繼續處理新的客戶端請求。 b)RDB讀取 redis啟動的時候會根據配置的持久化模式,決定是否讀取RDB文件,並將其保存到記憶體中。 在此過程中,每載入1000個key,就處理一次已經等待處理的客戶端請求,不過目前只能處理訂閱功能的命令, 其他一律返回錯誤信息。因為發佈訂閱功能不需要寫入數據,不需要保存在redis資料庫中   缺點: 1.保存頻率過低,宕機時會導致數據丟失 2.保存頻率過高,可能由於數據集過大導致操作耗時,短時間無法處理客戶端請求   (2)AOF持久化 將所有的寫命令記錄下來,達到記錄資料庫狀態的目的 a)保存 (1)將客戶端請求的命令轉化為網路協議格式 (2)將協議內容字元串追加到變數server.aof_buf 中 (3)當AOF系統達到設定的條件時,會調用aof_fsync將數據寫入磁碟            這裡的設定的條件,就是AOF性能的關鍵,其主要有3種類型           1.AOF_FSYNC_NO:不保存                該過程中命令只會追加到server.aof_buf中,但是不會執行寫入磁碟,當redis被正常關閉,AOF功能關閉,或者buf 緩存寫滿了,或者定時保存操作執行,這3種情況下都會阻塞主進程,導致客戶端請求失敗。           2.AOF_FSYNC_EVERYSECS 每秒保存一次                後臺子進程調用寫入保存,不會阻塞主進程,發送宕機最大丟失數據2s內           3.AOF_FSYNC_ALWAYS 沒執行一個命令保存一次                保證每條命令都保存,數據不丟失,但是會影響性能,因為每一次操作都會阻塞主進程     AOF提供了重寫機制,可以減少命令   4.redis rehash redis 的rehash機制和php的rehash機制不相同; php使用阻塞型rehash,在此期間不能對hash 表做任何操作,而redis不能,redis操作頻繁,對性能要求高。   redis 採用漸進式rehash方式 redis中會保存兩個hash數組,正常的操作只會針對h[0],h[1]做rehash之用; 在rehash過程中,所有的寫都切換到h[1],讀操作先針對h[0],都去不到再去都去h[1],  
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.首先修改activity.xml中的代碼: 2.然後MainActivity中的代碼: 3.最後設置許可權: <uses-permission android:name="android.permission.INTERNET"/> 4.運行效果如下:(這樣就不需調用系統預設瀏覽器) ...
  • 看來是沒有交換空間,原因是快閃記憶體和SSD硬碟相比,速度很慢,也有電源管理的原因。the NAND flash is not designed to be used as swap. It is damaging to the overall health of the chipsIs virtual ... ...
  • 本文原文地址 http://www.cnblogs.com/qianLL/p/6082287.html 有時候 後臺返回的是一串html'字元串 我們需要把裡面的圖片地址提取出來 這個關鍵就是一個正確的正則表達式 即 <(img|IMG)(.*?)(/>|></img>|>) 具體代碼如下 返回的是 ...
  • 用CREATE RULE語句創建規則 創建雇佣日期規則 hire_date_rule 創建性別規則sex_rule 創建評分規則grade_rule 創建字元規則my_character_rule sp_helptext 查看規則 查看規則hire_date_rule的文本信息 sp_bindrul ...
  • SELECT 語句 SELECT檢索表數據,必須至少給出兩條信息 想選擇什麼,以及從什麼地方選擇。 檢索一個列 SELECT prod_name FROM products; 上述語句利用SELECT語句從products表中檢索一個名為prod_name的列 檢索多個列 SELECT prod_i ...
  • -- -- instr functions that mimic Oracle's counterpart -- Syntax: instr(string1, string2, [n], [m]) where [] denotes optional parameters. -- -- Searche ...
  • 【函數】Oracle函數系列(2)--數學函數及日期函數 1 BLOG文檔結構圖 2 前言部分 2.1 導讀和註意事項 各位技術愛好者,看完本文後,你可以掌握如下的技能,也可以學到一些其它你所不知道的知識,~O(∩_∩)O~: ① 數學函數 ② trunc和round函數 ③ 常用日期函數 Tips ...
  • --創建insert類型的觸發器create trigger tgr_product_insert --創建觸發器 on product --所針對的表 for insert --觸發器類型 as --聲明變數 declare @Pid int,@Wid int --獲取添加商品時的主鍵(自增列) ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...