7、Redis-事務、持久化、內存淘汰機制和過期key處理

目錄

一、事務

二、持久化

三、內存淘汰機制

四、過期key處理


一、事務

Redis的事務本質上就是一個批量執行命令的操作。分為三個步驟:

  • 開始事務:multi
  • 命令入隊:正常輸入命令即可
  • 執行事務(依次執行命令):exec

執行過程中某條命令失敗,事務既不會回滾,也不會停止。

127.0.0.1:6379> multi
OK
127.0.0.1:6379> set name Trxcx
QUEUED // 命令入隊而不是立即被執行
127.0.0.1:6379> set age 21
QUEUED
127.0.0.1:6379> incr age
QUEUED
127.0.0.1:6379> incr name // 錯誤的命令正常入隊
QUEUED
127.0.0.1:6379> get name
QUEUED
127.0.0.1:6379> get age
QUEUED
127.0.0.1:6379> exec
1) OK
2) OK
3) (integer) 22
4) (error) ERR value is not an integer or out of range
5) "Trxcx"
6) "22" 
// 即使中間某條命令出錯,前面的命令也沒有回滾,后面的命令也沒有停止。
// 整個事務就是在依次執行這些命令

二、持久化

Redis會不定時地將數據持久化到硬盤中,當Redis啟動時,會把硬盤中的數據加載到內存中。

Redis持久化機制共有3種:

1、RDB(Redis DataBase ):快照方式

將內存中的數據以快照的方式寫入二進制文件,默認為dump.rdb【Redis安裝目錄下】中。觸發RDB持久化的機制分為手動觸發和自動觸發。

  • ????????手動觸發:

????????????????①使用save命令。阻塞Redis服務器直到RDB過程完成,數據較多時會長時間阻塞。

????????????????②使用bgsave命令。執行fork指令創建子進程實現RDB持久化。【更建議使用】

  • ????????自動觸發:

? ? ? ? ? ? ? ? 使用save進行配置。格式為:save m n。

????????????????表示m秒內數據集存在n次修改則會觸發bgsave。

? ? ? ? ? ? ? ? save 300 10:表示300秒內超過10個key被修改,則觸發RDB過程進行持久化

2、AOF(Append Only File ):文件追加方式

AOF 日志是一個增量日志文件,它會記錄執行的命令。因此,重啟時再重新執行AOF文件中的命令,就可以達到恢復數據的目的。

Redis默認是不開啟AOF的,通過修改配置文件進行配置。redis 開啟AOF - 簡書 (jianshu.com)

AOF共有3種配置策略,

  • appendfsync always:立即同步命令到磁盤,效率慢但保證完全持久化
  • appendfsync everysec:每秒同步一次,效率和持久化效果居中【更推薦使用】
  • appendfsync no:依賴操作系統,通常每30s同步一次

AOF Rewrite:AOF 文件記錄了每個寫操作的日志,以確保數據持久性。隨著時間的推移,AOF 文件會不斷增大。為了解決這個問題,Redis通過AOF Rewrite 操作創建一個新的 AOF 文件,其中只包含當前數據庫狀態的最小命令集,然后將舊的 AOF 文件替換為這個新文件。

總結:RDB持久化文件更小,啟動速度更快;AOF則在持久化的效果方面更勝一籌。

3、混合持久化方式

Redis同時開啟RDB和AOF,在某時刻T1進行了RDB持久化,在下一次RDB持久化(T3)之前,Redis服務器于T2時刻重啟。

此時恢復數據時,T1之前的數據以 RDB 的形式寫入文件的開頭(全量恢復),T1到T2之間的數據則通過執行AOF文件存儲的操作命令(增量恢復),以此達到速度和持久化效率的平衡。

即以 RDB 作為全量備份,AOF 作為增量備份。

4、持久化機制選擇

  • 對安全性要求高:RDB+AOF
  • 可以容忍數據丟失:RDB
  • 不推薦單獨AOF,可能出現bug。

關于Redis啟動:

AOF和RDB同時存在時優先加載AOF;某一個存在時就加載那一個。

都不存在或加載成功時則啟動成功,存在AOF或者RDB但加載失敗時則啟動失敗。


三、內存淘汰機制

  • LRU:Least recently used。最近最少被使用到的key被淘汰。在可選的淘汰對象中,上一次使用時間距離現在最久的key被淘汰。【recently---關注時間】
  • LFU:Least Frequently Used。最不經常使用的key被淘汰。在可選的淘汰對象中,使用次數最少的key被淘汰。【Frequently ---關注使用頻次】
  • TTL:設置了過期時間且快要過期的key被淘汰。
  • 隨機淘汰。

四、過期key處理

  • 惰性刪除:訪問key時才去判斷是否過期,過期則直接刪除。【CPU友好,但長期不用的key會一直存在內存中,造成內存浪費】
  • 定時刪除:設置定時器,到達過期時間時立即刪除。【CPU不友好,需要額外維護定時器】
  • 定期刪除:隔一段時間檢查一次,刪除過期的key。

實際使用:惰性刪除+定期刪除,在CPU使用和內存浪費之間取得平衡。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/712165.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/712165.shtml
英文地址,請注明出處:http://en.pswp.cn/news/712165.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

掌握java模板方法模式,提升代碼復用與擴展的藝術

Java 模板方法模式是一種行為型設計模式,它定義了一個算法的骨架,并將一些步驟延遲到子類中實現。模板方法模式使得子類可以在不改變算法結構的情況下重定義算法中的某些步驟。 使用場景 算法骨架固定:如果一個算法的基本結構已經固定&#…

跨專業考研難度大嗎?聽聽過來人的真實經歷

在考研的大潮中,跨專業考研成為了一個不可忽視的現象。許多考生因為對原專業失去興趣、追求職業夢想或其他原因,選擇了跨專業報考。那么,跨專業考研的難度究竟有多大呢?今天,我們就來聊聊這個話題,聽聽過來…

不是我吹,這8道HashMap面試題讓你面試時對答如流

前言 又到了一年一度的金三銀四面試季,我們拿著自己的面試秘籍去面試,但是面試官的問題五花八門,讓我們摸不清他們的套路。今天我就總結了面試時必問的hashmap面試題,無論面試官怎么問,我們都對答如流。 另外本人整理了…

java小記(2)

IS-A:類的父子繼承關系。 default:關鍵字,與Java中的public,private等關鍵字一樣,都屬于修飾符關鍵字,可以用來修飾屬性、方法以及類,但是default一般用來修飾接口中的方法。 接口與抽象類的區…

代碼隨想錄算法訓練營第二十四天 | 77. 組合

回溯算法理論基礎 https://programmercarl.com/%E5%9B%9E%E6%BA%AF%E7%AE%97%E6%B3%95%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html 回溯法也可以叫做回溯搜索法,它是一種搜索的方式。 回溯是遞歸的副產品,只要有遞歸就會有回溯。 回溯法并不是什么高效的…

馬斯克正式起訴OpenAI和奧特曼!

就在剛剛,馬斯克鬧出來一件大事——正式起訴OpenAI和Sam Altman,并要求OpenAI 恢復開源GPT-4等模型! 眾所周知,馬斯克這兩年一只在推特上指責 OpenAI是CloseAI(不開源),但都只是停留在口頭上。 而這次馬斯克動了真格。…

nginx if 指令

目錄 nginx if 指令直接判斷變量判斷是否等于字符串判斷變量是否匹配正則表達式文件及目錄判斷示例1:判斷index.html是否存在示例2:判斷URL中是否存在某個參數Parameter示例3:判斷URI中是否為某個特定路徑示例4:開放白名單內的功能…

從0開始python學習-53.python中flask創建簡單接口

目錄 1. 創建一個簡單的請求,沒有寫方法時默認為get 2. 創建一個get請求 3. 創建一個post請求,默認可以使用params和表單傳參 4. 帶有參數的post請求 1. 創建一個簡單的請求,沒有寫方法時默認為get from flask import Flask, request# 初始化一個flask的對象 ap…

RK3566 linux iperf網絡測試

一、開發環境 系統:buildroot; 在Linux目標板和Windows PC上運行iperf進行測試; 二、調試 1、查詢目標板上的iperf 使用終端助手連接目標板,然后輸入命令查詢iperf的版本: rootrk3566-buildroot:~# iperf -v iperf version …

圖數據庫 之 Neo4j - 應用場景3 - 知識圖譜(8)

背景 知識圖譜的復雜性:知識圖譜通常包含大量的實體、關系和屬性,以及它們之間的復雜關聯。傳統的關系型數據庫在處理這種復雜性時可能面臨性能和靈活性的挑戰。 圖數據庫的優勢:圖數據庫是一種專門用于存儲和處理圖結構數據的數據庫。它們使用節點和邊來表示實體和關系,并…

USB - Battery Charing

Getting to the bottom of USB Battery Charging (了解 USB 電池充電的真相) 如今,幾乎所有帶電池的產品都被期望支持 BC1.2 USB 充電標準。 Today, almost every product with a battery is expected to support the BC1.2 standard for USB charging. 這對消費者來…

詳解字符串函數<string.h>(上)

1. strlen函數的使用和模擬實現 size_t strlen(const char* str); 1.1 函數功能以及用法 字符串長度 strlen函數的功能是計算字符串的長度。在使用時&#xff0c;要求用戶傳入需要計算長度的字符串的起始位置&#xff0c;并返回字符串的長度。 #include <stdio.h> #…

基于SSM醫院電子病歷管理系統的設計與實現(源代碼+數據庫腳本+萬字文檔+PPT)

系統介紹 醫院電子病歷管理系統主要是借助計算機&#xff0c;通過對醫院電子病歷管理系統所需的信息管理&#xff0c;增加用戶的選擇&#xff0c;同時也方便對廣大用戶信息的及時查詢、修改以及對用戶信息的及時了解。醫院電子病歷管理系統 對用戶帶來了更多的便利&#xff0c…

Python GUI自動化定位代碼參考

一、pyautogui原始邏輯 import pyautogui # 獲取指定圖片在屏幕上的位置 image_path path/to/image.png target_position pyautogui.locateCenterOnScreen(image_path) if target_position is not None: # 獲取偏移量 offset_x 10 offset_y 10 # 計算實際點…

一文讀懂ZKFair PFP-CyberArmy的參與價值與潛力

3月2日&#xff0c;ZKFair PFP-CyberArmy 將在 Element 上正式開始Public Sale。

文件基礎和文件fd

文章目錄 預備知識C語言的文件接口系統調用文件fd 正文開始前給大家推薦個網站&#xff0c;前些天發現了一個巨牛的 人工智能學習網站&#xff0c; 通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。 點擊跳轉到網站。 預備知識 我們平時說文件就是說文件里…

1_Springboot(一)入門

Springboot&#xff08;一&#xff09;——入門 本章重點&#xff1a; 1.什么是Springboot; 2.使用Springboot搭建web項目&#xff1b; 一、Springboot 1.Springboot產生的背景 Servlet->Struts2->Spring->SpringMVC&#xff0c;技術發展過程中&#xff0c;對使…

大模型量化技術原理-SmoothQuant

近年來&#xff0c;隨著Transformer、MOE架構的提出&#xff0c;使得深度學習模型輕松突破上萬億規模參數&#xff0c;從而導致模型變得越來越大&#xff0c;因此&#xff0c;我們需要一些大模型壓縮技術來降低模型部署的成本&#xff0c;并提升模型的推理性能。 模型壓縮主要分…

強化學習(六)時序差分

時序差分&#xff08;TD&#xff09;是強化學習的核心&#xff0c;其是蒙特卡羅&#xff08;MC&#xff09;和動態規劃&#xff08;DP&#xff09;的結合。 1、TD 預測 TD 和 MC 都是利用經驗來解決預測問題。一種非平穩環境的一般訪問蒙特卡羅方法是 V ( S t ) ← V ( S t …

Python GUI開發庫之nicegui使用詳解

概要 在 Python 中,創建圖形用戶界面(GUI)應用程序通常需要大量的代碼和時間。然而,隨著 Python 生態系統的不斷發展,出現了一些簡化 GUI 開發過程的工具和庫。其中之一就是 NiceGUI 庫。本文將深入探討 NiceGUI 庫的功能、用法以及如何利用它來創建漂亮而功能豐富的 GUI…