日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Redis的一些问题

發布時間:2025/3/19 数据库 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 的持久化模式:

  • 純內存運行,不具備持久化,服務一旦停機,所有數據將丟失。
  • RDB 模式,取決于 RDB 策略,只有在滿足策略才會執行 Bgsave,異步執行并不能保證 Redis 具備持久化。
  • AOF 模式,只有將 appendfsync 設置為 always,程序才會在執行命令同步保存到磁盤,這個模式下,Redis 具備持久化。(將 appendfsync 設置為 always,只是在理論上持久化可行,但一般不會這么操作)
  • 簡單總結:

  • Redis 具備了一定的原子性,但不支持回滾。
  • Redis 不具備 ACID 中一致性的概念。(或者說 Redis 在設計時就無視這點)
  • 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的一些问题的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。