Nosql

刪除操作是否寫入 Redis 中的 AppendOnlyFile?

  • June 19, 2017

Redis 中的 AppendOnlyFile 記錄對 redis 數據庫執行的每個寫入操作。

我的問題是,當我們從 redis 數據庫中刪除數據時,這些操作是否記錄在 AppendOnlyFile 中?而從數據庫中刪除的數據,AppendOnlyFile中與該數據對應的記錄是否也被刪除了?

例如,

我設置了一個鍵,

127.0.0.1:6379 > set a apple

這將記錄在 AppendOnlyFile 中,假設為**“Log:set:a:apple”**

現在,如果我這樣做,

127.0.0.1:6379 > del a

這會做什麼?是否會製作與此相對應的日誌,例如**“Log:del:a”?一旦我們刪除密鑰,日誌“Log:set:a:apple”**也會被刪除嗎?

是的。數據的每次修改(也包括刪除)都會寫入 AOF。請參閱 Redis 持久性揭秘部落格文章。

僅附加文件 僅附加文件,通常簡稱為 AOF,是 Redis 的主要持久性選項。它的工作方式非常簡單:每次執行修改記憶體中數據集的寫入操作時,都會記錄該操作。日誌的生成格式與客戶端與 Redis 通信所使用的格式完全相同,因此 AOF 甚至可以通過 netcat 管道傳輸到另一個實例,或者在需要時輕鬆解析。重新啟動時,Redis 會重新播放所有操作以重建數據集。

為了展示 AOF 在實踐中是如何工作的,我將做一個簡單的實驗,設置一個新的 Redis 2.6 實例並啟用僅附加文件:

./redis-server --appendonly yes

現在是時候向實例發送一些寫命令了:

redis 127.0.0.1:6379> set key1 Hello
OK
redis 127.0.0.1:6379> append key1 " World!"
(integer) 12
redis 127.0.0.1:6379> del key1
(integer) 1
redis 127.0.0.1:6379> del non_existing_key
(integer) 0

前三個操作實際上修改了數據集,第四個沒有,因為沒有指定名稱的鍵。這就是我們的僅附加文件的樣子:

$ cat appendonly.aof 
*2
$6
SELECT
$1
0
*3
$3
set
$4
key1
$5
Hello
*3
$6
append
$4
key1
$7
 World!
*2
$3
del
$4
key1

如您所見,最終的 DEL 失去了,因為它沒有對數據集進行任何修改。

引用自:https://dba.stackexchange.com/questions/168735