Redis數(shù)據(jù)類型、事務(wù)以及持久化

      網(wǎng)友投稿 1063 2022-05-28

      Redis的數(shù)據(jù)類型、事務(wù)以及持久化

      目錄

      1. 基本的數(shù)據(jù)類型

      1.1 字符串String

      1.2 列表 list

      1.3 集合 set

      1.4 有序集合 zset

      1.5 哈希 hash

      2. Redis 事務(wù)

      2.1 事務(wù)對比

      2.2 事務(wù)過程

      2.3 一個面試題

      3. Redis 持久化

      3.1 RDB 方式

      3.1.1 快照的實(shí)現(xiàn)過程

      3.1.2 RDB優(yōu)點(diǎn)

      3.1.3 RDB的缺點(diǎn)

      3.2 AOF持久化

      3.2.1 AOF簡介

      3.2.2 AOF 重寫

      3.3 持久化面試題

      1. 基本的數(shù)據(jù)類型

      1.1 字符串String

      1.2 列表 list

      1.3 集合 set

      1.4 有序集合 zset

      1.5 哈希 hash

      2. Redis 事務(wù)

      事務(wù)的本質(zhì)是一組命令的集合,一個事務(wù)中的所有的命令都會序列化,按順序地串行化而不會被其他命令插入,不許阻塞。

      2.1 事務(wù)對比

      我們可以用mysql的事務(wù)進(jìn)行對比。

      redis中使用multi命令表示事務(wù)開始,在multi之后再輸入redis命令,返回的不是ok,而是queued,表示該命令并沒有執(zhí)行,而是放入了隊(duì)列中,這時候我們就要用exec命令完成事務(wù)。在執(zhí)行隊(duì)列中的命令過程中,不允許執(zhí)行其他redis命令。

      關(guān)于執(zhí)行錯誤的語句:

      語法錯誤的命令,該條命令回車后直接報錯。執(zhí)行exec之后,所有事務(wù)中的語句均得不到執(zhí)行。

      語法正確的而執(zhí)行后會報錯的命令,回車后先存到隊(duì)列,exec之后會執(zhí)行正確的語句,并跳過執(zhí)行后會報錯的語句。

      為什么redis沒有回滾功能:

      沒有任何機(jī)制能避免程序員自己造成的錯誤,并且這類錯誤通常不會出現(xiàn)在生產(chǎn)環(huán)境中出現(xiàn),所以Redis選擇了更簡單,更快速的無回滾方式來處理事務(wù)。

      這類錯誤應(yīng)該由程序員負(fù)責(zé)

      悲觀鎖:常用來數(shù)據(jù)備份,格式化

      樂觀鎖:常用來多讀應(yīng)用

      2.2 事務(wù)過程

      當(dāng)服務(wù)器接收到客戶端發(fā)送過來的命令是MULTI、EXEC、WATCH、DISCARD、UNWATCH中的任意一個時,服務(wù)器會立即執(zhí)行這個命令

      否則服務(wù)器不會立即執(zhí)行這個命令,而是將該命令放入一個事務(wù)隊(duì)列中,然后返回QUEUED標(biāo)識給客戶端

      2.3 一個面試題

      Redis 是否支持事務(wù)?

      答:事務(wù)的原子性要求:**一個原子事務(wù)要么完整執(zhí)行,要么干脆不執(zhí)行。 **

      在redis事務(wù)中語法錯誤的命令不會存到隊(duì)列,該條命令回車后直接報錯,exec之后所有事務(wù)中的語句得不到執(zhí)行;而語法沒錯而執(zhí)行后會報錯的命令,會先存到隊(duì)列中,exec后會執(zhí)行正確的語句,跳過執(zhí)行后會報錯的語句6,因此不完全滿足原子性特征

      3. Redis 持久化

      Redis 作為數(shù)據(jù)庫存儲數(shù)據(jù),希望長久保存數(shù)據(jù)庫,就需要持久化

      3.1 RDB 方式

      根據(jù)指定的規(guī)則“定時”將內(nèi)存中的數(shù)據(jù)(快照)保存到硬盤中

      每隔N分鐘或者N次寫操作后,Redis會自動將內(nèi)存中的所有數(shù)據(jù)生成一份副本,經(jīng)過壓縮成二進(jìn)制文件存儲在硬盤目錄,這個過程也被稱為快照。

      快照文件可以還原當(dāng)時的數(shù)據(jù)庫狀態(tài),由于快照文件保存在硬盤上,就算服務(wù)器停止服務(wù),也可以利用RDB文件來還原數(shù)據(jù)庫狀態(tài)

      3.1.1 快照的實(shí)現(xiàn)過程

      Redis 調(diào)用執(zhí)行fork函數(shù)復(fù)制一份當(dāng)前進(jìn)程(父進(jìn)程)的副本(子進(jìn)程)

      父進(jìn)程繼續(xù)處理來自客戶端的命令請求,而子進(jìn)程則將內(nèi)存中的數(shù)據(jù)寫到硬盤中的一個臨時RDB文件中.

      當(dāng)子進(jìn)程把所有數(shù)據(jù)寫完后,也就表示快照生成完畢,此時舊的RDB文件將會被這個臨時RDB文件替換,這個舊的RDB文件也會被刪除。

      在執(zhí)行fork函數(shù)的過程中,父、子進(jìn)程共享同一內(nèi)存數(shù)據(jù)

      當(dāng)父進(jìn)程要修改某個數(shù)據(jù)時,操作系統(tǒng)會將這個共享內(nèi)存數(shù)據(jù)另外復(fù)制一份給子進(jìn)程使用,以此來保證子進(jìn)程的正確運(yùn)行

      如果寫操作比較多,內(nèi)存使用量變大(復(fù)制很多)

      3.1.2 RDB優(yōu)點(diǎn)

      RDB 文件是一個經(jīng)過壓縮的二進(jìn)制文件,文件緊湊,體積較小(如果開啟壓縮模式),非常適用于進(jìn)行數(shù)據(jù)庫數(shù)據(jù)備份

      RDB持久化用于災(zāi)難恢復(fù),而且恢復(fù)數(shù)據(jù)時的速度快(因?yàn)槭莾?nèi)存快照,將快照文件直接讀到內(nèi)存里)

      并行性好,單獨(dú)的進(jìn)程保存RDB快照,保存RDB的過程中,其他進(jìn)程繼續(xù)處理其他相關(guān)的操作

      3.1.3 RDB的缺點(diǎn)

      如果兩個RDB保存點(diǎn)之間發(fā)生了斷電,那么就會損失兩個保存點(diǎn)之間時間段寫入的數(shù)據(jù)。

      當(dāng)數(shù)據(jù)量非常龐大時,在生成和保存RDB文件的時候,操作比較耗時,將會占用太多CPU時間,從而影響服務(wù)器的性能。

      RDB文件存在兼容性問題,老版本的Redis不支持新版本的RDB文件

      3.2 AOF持久化

      3.2.1 AOF簡介

      將每次執(zhí)行的命令及時形成日志保存到硬盤中

      保存服務(wù)器執(zhí)行的所有寫操作命令到單獨(dú)的日志文件中

      在服務(wù)器重啟時,通過加載日志文件中的這些命令并執(zhí)行來恢復(fù)數(shù)據(jù)(實(shí)時性更好,也就是當(dāng)進(jìn)程意外退出時,丟失的數(shù)據(jù)更少)

      3.2.2 AOF 重寫

      AOF持久化的實(shí)現(xiàn)是通過保存被執(zhí)行的寫命令來保存數(shù)據(jù)庫數(shù)據(jù)

      隨著運(yùn)行時間的增加,AOF文件的內(nèi)容增大,占空間變多

      太大的AOF文件會影響服務(wù)器的正常運(yùn)行,在執(zhí)行數(shù)據(jù)恢復(fù)時,將會耗費(fèi)更多的時間

      AOF重寫是指把內(nèi)存中的數(shù)據(jù),逆化成命令,寫入AOF日志中,以解決AOF日志過大的問題

      重寫會丟棄過期的數(shù)據(jù),無效的命令,也可以 多條命令合并為一條命令

      3.3 持久化面試題

      問:RDB恢復(fù)的速度快,還是AOF恢復(fù)的速度快?

      RDB快,因?yàn)槠涫菙?shù)據(jù)的內(nèi)存映射,即快照,直接載入到內(nèi)存即可,AOF文件記錄的是一行一行的命令,需要逐條執(zhí)行才能得到數(shù)據(jù)庫的最終形態(tài)。

      Redis 數(shù)據(jù)結(jié)構(gòu)

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:[springboot]使用log4j2異步日志提升性能
      下一篇:XFS文件系統(tǒng)備份恢復(fù)
      相關(guān)文章
      亚洲A∨午夜成人片精品网站| 亚洲s码欧洲m码吹潮| 亚洲成?Ⅴ人在线观看无码| 亚洲国产欧美日韩精品一区二区三区 | 亚洲第一精品福利| 国产v亚洲v天堂无码网站| 亚洲色欲久久久综合网| 国产AV无码专区亚洲AV漫画 | 亚洲天堂2016| 亚洲一区中文字幕| 亚洲免费一级视频| 亚洲精品午夜国产va久久| 国产精品亚洲综合五月天| 亚洲一区二区三区写真| 亚洲乱码无人区卡1卡2卡3| 亚洲第一街区偷拍街拍| 亚洲äv永久无码精品天堂久久| 日韩欧美亚洲国产精品字幕久久久| 亚洲av无码专区首页| 婷婷综合缴情亚洲狠狠尤物| 亚洲不卡无码av中文字幕| 亚洲中文字幕无码日韩| 亚洲产国偷V产偷V自拍色戒 | 久久久久亚洲精品天堂| 亚洲国产美女精品久久久久| 亚洲av乱码一区二区三区香蕉 | 亚洲乱码国产乱码精华| 国产精品亚洲AV三区| 亚洲精品视频免费| 亚洲色精品88色婷婷七月丁香| 久久久无码精品亚洲日韩蜜桃| 亚洲天堂视频在线观看| 亚洲专区一路线二| 亚洲精品理论电影在线观看| 亚洲精品视频免费| 午夜亚洲AV日韩AV无码大全| 亚洲国产精品综合久久2007| 亚洲国产区男人本色| 国产亚洲AV手机在线观看| 亚洲电影中文字幕| 久久久久亚洲国产|