3 回答

TA貢獻1847條經驗 獲得超7個贊
數據完整性
從很多方面來看,Redis 很像當初采用 InnoDB 前的 MySQL。而 Redis 采用了一種很合理的方式來保證數據完整性(復制,AOF 等),并且從 Redis2.6 開始引入的 Lua 腳本在功能與易用性方面為 Redis 的成長提供了很大助力。
相對來說,Lua 腳本與其他數據庫中的存儲過程很相似,但腳本的執行有些許不同。在本文中最重要的一點就是一旦將腳本寫入數據庫,它會一直執行直到以下任一種情況出現:
1. 完成所有工作,所有寫操作處理完成后腳本會自動退出。
2. 腳本運行時出錯并中途退出,所有以前執行的寫操作都已發生,但不會再有其他寫操作。
3. Redis 通過 SHUTDOWN NOSAVE 關閉時(不保存)。
4. 你附加了調試器來“使”腳本完成 #1 與 #2 (或其他手段來保證不會丟失數據)。
對于使用數據庫開發軟件的人,我想你也認同只有情景 #1 是最理想的。情景 #2,#3,#4 都會導致數據異常(#2 與
#4)和/或數據丟失(#3 和 #4)。如果你很重視數據,你應該盡可能地阻止數據異常與丟失。這不是哲學,而是工作(This is not
philosophy, this is doing your job)。但很遺憾目前的 Redis 也幫不了你多少。所以我決定改變這種情況。

TA貢獻1836條經驗 獲得超13個贊
為了將內存中的數據傳送到磁盤上,我們需要使用交換文件。
這些文件與數據持久性無關,Redis會在退出前會將它們全部刪除。由于對交換文件的訪問方式大多為隨機訪問,因此建議將交換文件存儲在固態磁盤上,這樣可以大大提高系統的運行效率。

TA貢獻1893條經驗 獲得超10個贊
1. 完成所有工作,所有寫操作處理完成后腳本會自動退出。
2. 腳本運行時出錯并中途退出,所有以前執行的寫操作都已發生,但不會再有其他寫操作。
3. Redis 通過 SHUTDOWN NOSAVE 關閉時(不保存)。
4. 你附加了調試器來“使”腳本完成 #1 與 #2 (或其他手段來保證不會丟失數據)。
對于使用數據庫開發軟件的人,我想你也認同只有情景 #1 是最理想的。情景 #2,#3,#4 都會導致數據異常(#2 與 #4)和/或數據丟失(#3 和 #4)。如果你很重視數據,你應該盡可能地阻止數據異常與丟失。這不是哲學,而是工作(This is not philosophy, this is doing your job)。但很遺憾目前的 Redis 也幫不了你多少。所以我決定改變這種情況。
- 3 回答
- 0 關注
- 768 瀏覽
添加回答
舉報