我們都知道,Redis是一個基于內存的k-v數據庫,既然是基于內存的,那么Redis如何保證數據不丟失?以及真的能做到數據的百分百不丟失嗎?
為什么Redis數據需要持久化機制?
Redis的一個常用場景是緩存,通常緩存丟失的話,我們也可以從數據庫中重新找回,那么為什么Redis還需要持久化機制呢?
試想一下,如果Redis沒有持久化機制,一旦Redis宕機重啟,所有的數據都丟失了,那么,就意味著所有的請求都會穿透緩存,打到數據庫,這會給數據庫造成較大的壓力,讓系統不穩定,因此持久化機制是一個必要的功能。
AOF日志
AOF是Redis實現持久化的一種手段,簡單來說,就是Redis在執行完一條命令后,會將這條命令記錄在AOF文件中,當需要恢復數據的時候,就重新執行一遍AOF文件中的命令。
從上面這段描述中,你可能會發現一個問題,如果在Redis執行完命令后,還未來得及寫入AOF文件,此時Redis掛了,那數據不就丟失了嗎?
是的,所以Redis沒有辦法保證數據百分百不丟失,這也是我們不建議完全使用Redis當數據庫的一個原因。
但Redis可以保證大部分數據都不丟失,這就要看AOF的三種寫回策略了:
- Always:每一次執行,都立馬同步寫磁盤,將命令寫到AOF文件中
- Everysec:先將命令寫到內存緩沖區中,1s后在將內存緩沖區中的內容同步