Redis的一些问题
摘錄于 https://mp.weixin.qq.com/s/LGkS_2wkcXhThfOiRRQC7Q
一、Redis 的通訊協議是什么
Redis 的通訊協議是文本協議,是的,Redis 服務器與客戶端通過 RESP(Redis Serialization Protocol)協議通信。
二、Redis 究竟有沒有 ACID 事務
1、原子性
事務具備原子性指的是,數據庫將事務中多個操作當作一個整體來執行,服務要么執行事務中所有的操作,要么一個操作也不會執行。
a、為何 Redis 不支持回滾
這個還是跟寫 Log 有關系,Redis 是完成操作之后才會進行 AOF 日志記錄,AOF 日志的定位只是記錄操作的指令記錄。
2、一致性
事務具備一致性指的是,如果數據庫在執行事務之前是一致的,那么在事務執行之后,無論事務是否成功,數據庫也應該是一致的。
未知
3、隔離性
隔離性指的是,數據庫中有多個事務并發的執行,各個事務之間不會相互影響,并且在并發狀態下執行的事務和串行執行的事務產生的結果是完全相同的。
Redis 因為是單線程操作,所以在隔離性上有天生的隔離機制,當 Redis 執行事務時,Redis 的服務端保證在執行事務期間不會對事務進行中斷,所以,Redis 事務總是以串行的方式運行,事務也具備隔離性
4、持久性
事務的持久性指的是,當一個事務執行完畢,執行這個事務所得到的結果被保存在持久化的存儲中,即使服務器在事務執行完成后停機了,執行的事務的結果也不會被丟失。
Redis 是否具備持久化,這個取決于 Redis 的持久化模式:
簡單總結:
三、Redis 的樂觀鎖 Watch 是怎么實現的
Redis 的 Watch 機制,更多是利用了 Redis 本身單線程的機制,采用了 watched_keys 的數據結構和串行流程實現了樂觀鎖機制。
四、Redis 是如何持久化的
1、RDB
使用 Bgsave ,Redis 會 Fork 一個子進程,快照的持久化就交給子進程去處理,而父進程繼續處理線上業務的請求。
2、AOF
AOF 是 Redis 操作指令的日志存儲,
AOF 寫操作是在 Redis 處理完業務邏輯之后,按照一定的策略才會進行些 AOF 日志存盤
也因為此原因,Redis 因為處理邏輯在前而記錄操作日志在后,也是導致 Redis 無法進行回滾的一個原因。
不過 AOF 日志也有兩個比較大的問題:
1、一個是 AOF 的日志會隨著時間遞增,如果一個數據量大運行的時間久,AOF 日志量將變得異常龐大。2、另一個問題是 AOF 在做數據恢復時,由于重放的量非常龐大,恢復的時間將會非常的長。bgrewriteaof:針對上述的問題,Redis 在 2.4 之后也使用了 bgrewriteaof 對 AOF 日志進行瘦身。
bgrewriteaof 命令用于異步執行一個 AOF 文件重寫操作。重寫會創建一個當前 AOF 文件的體積優化版本。
3、RDB 和 AOF 混合搭配模式
在對 Redis 進行恢復的時候,如果我們采用了 RDB 的方式,因為 Bgsave 的策略,可能會導致我們丟失大量的數據。
如果我們采用了 AOF 的模式,通過 AOF 操作日志重放恢復,重放 AOF 日志比 RDB 要長久很多。
Redis 4.0 之后,引入了新的持久化模式,混合持久化,將 RDB 的文件和局部增量的 AOF 文件相結合。
RDB 可以使用相隔較長的時間保存策略,AOF 不需要是全量日志,只需要保存前一次 RDB 存儲開始到這段時間增量 AOF 日志即可,一般來說,這個日志量是非常小的。
五、Redis 是怎么制定過期刪除策略的
定時刪除:在設置鍵過去的時間同時,創建一個定時器,讓定時器在鍵過期時間來臨,立即執行對鍵的刪除操作。
惰性刪除: 放任鍵過期不管,但是每次從鍵空間獲取鍵時,都會檢查該鍵是否過期,如果過期的話,就刪除該鍵。
定期刪除:每隔一段時間,程序都要對數據庫進行一次檢查,刪除里面的過期鍵,至于要刪除多少過期鍵,由算法而定。
Redis采用的過期策略:惰性刪除+定期刪除
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的Redis的一些问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 假设有50瓶饮料,喝完3个空瓶可以换一瓶
- 下一篇: linux mysql 5.5 安装_L