<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                [TOC] * Redis是使用c語言開發的。 * Redis是一個基于內存的高性能key-value數據庫。 * Redis是單線程 * 每秒可以處理超過10萬次讀寫操作 * 單個value的最大限制是1GB * 默認端口6379 ## Reids三種不同刪除策略 **定時刪除**:在設置鍵的過期時間的同時,創建一個定時任務,當鍵達到過期時間時,立即執行對鍵的刪除操作 **惰性刪除**:放任鍵過期不管,但在每次從鍵空間獲取鍵時,都檢查取得的鍵是否過期,如果過期的話,就刪除該鍵,如果沒有過期,就返回該鍵 **定期刪除**:每隔一點時間,程序就對數據庫進行一次檢查,刪除里面的過期鍵,至于要刪除多少過期鍵,以及要檢查多少個數據庫,則由算法決定。 ## Reids6種淘汰策略 >* **noeviction**:不刪除策略, 達到最大內存限制時, 如果需要更多內存, 直接返回錯誤信息。大多數寫命令都會導致占用更多的內存(有極少數會例外。 >* **allkeys-lru**:所有key通用; 優先刪除最近最少使用(less recently used ,LRU) 的 key。 >* **volatile-lru**:只限于設置了 expire 的部分; 優先刪除最近最少使用(less recently used ,LRU) 的 key。 >* **allkeys-random**:所有key通用; 隨機刪除一部分 key。 >* **volatile-random**:只限于設置了**expire**的部分; 隨機刪除一部分 key。 >* **volatile-ttl**:只限于設置了**expire**的部分; 優先刪除剩余時間(time to live,TTL) 短的key。 ## LRU算法實現: 1. 通過雙向鏈表來實現,新數據插入到鏈表頭部; 2. 每當緩存命中(即緩存數據被訪問),則將數據移到鏈表頭部; 3. 當鏈表滿的時候,將鏈表尾部的數據丟棄。 >LinkedHashMap:HashMap和雙向鏈表合二為一即是LinkedHashMap。HashMap是無序的,LinkedHashMap通過維護一個額外的雙向鏈表保證了迭代順序。該迭代順序可以是插入順序(默認),也可以是訪問順序。 ## 緩存穿透、緩存擊穿、緩存雪崩 **緩存穿透**:指查詢一個一定不存在的數據,如果從存儲層查不到數據則不寫入緩存,這將導致這個不存在的數據每次請求都要到DB去查詢,可能導致DB掛掉。 >解決方案: >1. 查詢返回的數據為空,仍把這個空結果進行緩存,但過期時間會比較短; >2. 布隆過濾器:將所有可能存在的數據哈希到一個足夠大的bitmap中,一個一定不存在的數據會被這個bitmap攔截掉,從而避免了對DB的查詢。 **緩存擊穿**:對于設置了過期時間的key,緩存在某個時間點過期的時候,恰好這時間點對這個Key有大量的并發請求過來,這些請求發現緩存過期一般都會從后端DB加載數據并回設到緩存,這個時候大并發的請求可能會瞬間把DB壓垮。 >解決方案: >1. 使用互斥鎖:當緩存失效時,不立即去Ioaddb,先使用如Redis的setnx去設置一個互斥鎖,當操作成功返回時再進行Ioaddb的操作并回設緩存,否則重試get緩存的方法。 >2. 永遠不過期:物理不過期,但邏輯過期(后臺異步線程去刷新)。 **緩存雪崩**:設置緩存時采用了相同的過期時間,導致緩存在某一時刻同時失效,請求全部轉發到DB,DB瞬時壓力過重雪崩。 * 與緩存擊穿的區別:雪崩是很多key,擊穿是某一個key緩存。 >解決方案: >將緩存失效時間分散開,比如可以在原有的失效時間基礎上增加一個隨機值,比如1-5分鐘隨機,這樣每一個緩存的過期時間的重復率就會降低,就很難引發集體失效的事件
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看