當前位置:網站首頁>Redis基礎之溫故

Redis基礎之溫故

2022-05-13 17:28:49ldcaws

在日常開發中,必然離不開redis,下面對redis的基礎溫故一下,看看能否知新?
1、what
在這裏插入圖片描述
redis是一種基於鍵值對(key-value)的NoSQL數據庫。
redis中的value支持string(字符串)、hash(哈希)、list(列錶)、set(集合)、zset(有序集合)等多種數據結構,因此可以滿足很多的應用場景。
redis會將所有數據都存放在內存中,因此讀寫性能非常優秀。
redis可以將內存數據利用快照和日志的方式保存到硬盤上,因此發生類似斷電或機器故障時,內存中的數據不會“丟失”。
2、what can i do

  • 緩存
    基本所有的web應用都會使用redis作為緩存來降低數據庫壓力,提供響應速度。
  • 計數器
    redis天然支持計數功能,而且計數性能非常好,可以用來記錄瀏覽量、點贊量。
  • 排行榜
    redis提供了列錶和有序集合數據結構,可以很方便的構建各種排行榜。
  • 社交網絡
    可以用來贊/踩、粉絲、推送、下拉刷新。
  • 消息隊列
    redis提供了發布訂閱功能和堵塞隊列功能,可以滿足一般消息隊列功能。
  • 分布式鎖
    可以用來實現分布式鎖。
    在web應用中,通常會用來緩存token令牌、字典數據,也會使用其分布式鎖。

3、五種基本數據結構
在這裏插入圖片描述

  • string
    字符串是最基礎的數據結構,字符串類型的值實際可以是字符串、數字,甚至是二進制(圖片),但是值最大不能超過512MB。
  • hash
    哈希類型的值其本身又是一個鍵值對結構。
  • list
    列錶類型是用來存儲多個有序的字符串,列錶是一種比較靈活的數據結構,可以充當棧和隊列的角色。
  • set
    集合類型是用來保存多個字符串,但和列錶類型不一樣的是,集合中不允許有重複元素,並且集合中的元素的無序的。
  • sorted set
    有序集合中的元素可以排序,但和列錶使用索引下標作為排序依據不同的是,它給每個元素設置一個權重作為排序的依據。

4、redis為什麼快
單機的redis可以支撐每秒十萬次的並發,相對於mysql來說,性能是mysql的幾十倍。redis快是因為:完全基於內存操作;使用單線程,避免線程切換和竟態產生的消耗。基於非堵塞的IO多路複用機制;
5、redis持久化方式
redis持久化方式分為RDB和AOF兩種。

  • RDB
    RDB持久化是把當前進程數據生成快照保存到硬盤的過程,觸發RDB持久化過程分為手動觸發和自動觸發。RDB文件是一個壓縮的二進制文件,通過它可以還原某個時刻數據庫的狀態。
    手動觸發分別對應save和bgsave命令:
    在這裏插入圖片描述
    save命令會堵塞當前進程,直到RDB過程完成為止,對應內存比較大的實例會造成長時間堵塞,線上環境不建議使用。
    bgsave命令會執行fork操作創建子進程,RDB持久化過程由子進程負責,完成後自動結束,堵塞只發生在fork階段,時間短。
    自動觸發RDB持久化:
    使用save相關配置,如‘save m n’,指m秒內數據集進行n次修改時,自動觸發bgsave;
    如果從節點執行全量複制操作,主節點自動執行bgsave生成RDB文件並發送給從節點;
    執行debug reload命令重新加載redis時,也會自動觸發save操作。
    默認執行shutdown命令時,若幹沒有開啟AOF持久化功能則自動觸發bgsave操作。
  • AOF
    AOF持久化以獨立日志的方式記錄每次寫命令,重啟時再重新執行AOF文件中的命令以達到恢複數據的目的。AOF的主要作用是解决了數據持久化實時性,目前已經是redis持久化的主流方式。
    AOF的工作流程操作:命令寫入(append)、文件同步(sync)、文件重寫(rewrite)、重啟加載(load)。
  • RDB和AOF的優缺點
    RDB優點:只有一個緊凑的二進制文件dump.rdb,非常適合備份,全量複制的場景;容灾性好、恢複速度快;
    RDB缺點:實時性低,間隔一段時間進行持久化,沒法做到實時/秒級持久化;存在兼容問題;
    AOF優點:實時性好,aof可以配置appendfsync屬性,有always,每進行一次命令操作就記錄到aof文件中一次;通過 append 模式寫文件,即使中途服務器宕機,可以通過 redis-check-aof 工具解决數據一致性問題;
    AOF缺點:AOF文件比RDB文件大,且恢複速度慢;數據集大時,比RDB啟動效率低;

如果可以接受數分鐘內的數據丟失,可以只使用RDB方式,一般來說,可以同時使用RDB和AOF。

6、redis數據恢複
當redis發生故障,可以從RDB或AOF中恢複數據。恢複過程很簡單,把RDB或AOF文件拷貝到redis的數據目錄下,若使用AOF恢複,配置文件開啟AOF,然後啟動redis-server即可。
redis啟動時加載數據的流程:

  • AOF持久化開啟且存在AOF文件時,優先加載AOF文件;
  • AOF持久化關閉且不存在AOF文件時,加載RDB文件;
  • 加載AOF/RDB文件成功後,redis啟動成功;

版權聲明
本文為[ldcaws]所創,轉載請帶上原文鏈接,感謝
https://cht.chowdera.com/2022/133/202205131728374548.html

隨機推薦