中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何通過緩存+SQL修改優化慢查詢

發布時間:2023-04-07 09:51:41 來源:億速云 閱讀:113 作者:iii 欄目:數據庫

本篇內容介紹了“如何通過緩存+SQL修改優化慢查詢”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

    問題描述

    單例數據庫模式中,后端高并發請求多(讀多寫少),導致數據庫壓力過大,關鍵接口響應變慢,嚴重影響體驗。

    需求

    減少接口的響應時間。

    尋找解決方案

    由于問題主要處在數據庫壓力過大的情況,采用兩種優化思路優化查詢過程:

    • 使用緩存分擔數據庫壓力

    • 對查詢數據庫過程做優化

    緩存方案

    更新策略

    使用Redis,雖然可以很好地減少數據庫的壓力,但是同時在高并發的情況下,容易出現數據不一致的情況,尤其是在更新數據的時候。

    最常見的導致不一致的原因是雙寫操作,即高并發情況下短時間內對數據庫進行兩次寫操作。為了最小程度地出現這種情況,緩存在更新策略上采用先更新數據庫后刪除緩存的方式。

    對于雙寫問題,在最壞情況下,寫請求A在更新數據庫后,被寫請求B先一步更新數據庫+刪除緩存,然后A請求才刪除緩存,也不會導致后續請求讀取到錯誤的值。

    對于先寫后讀,在最壞情況下,寫請求A在更新數據庫后,被讀請求C先一步在緩存讀取到舊值,然后A請求才刪除緩存,也只會影響這段時間的讀請求,刪除后的讀請求不影響。

    對比其他方案(先更新緩存后更新數據庫、先刪除緩存后更新數據庫、先更新數據庫后更新緩存)在最壞情況下會導致的錯誤(更新數據庫失敗導致緩存是未知值、雙寫后數據庫變成舊值、更新緩存失敗導致緩存保存舊值)要好得多。

    但是先更新數據庫后刪除緩存也不是完全安全的,除了上文提到的高并發下先寫后讀可能讀到舊值外,若刪除緩存失敗,也有可能導致讀到舊值。處理方法見下文。

    緩存架構

    添加緩存,勢必要修改業務代碼,如何配置架構才能把對代碼的入侵性講到最低,這里使用監聽數據庫binlog的方法,使用中間件監聽mysql的日志,當出現操作時,通知專門的模塊來修改緩存,做到修改緩存和業務邏輯解耦。

    同時為了解決緩存刪除失敗的問題,當發生失敗時,發送消息至消息隊列傳遞給專門的模塊進行重試刪除。

    中間件選擇:

    • 緩存使用Redis

    • 監聽binlog使用canal

    • 消息隊列使用RocketMQ

    架構如下所示:

    如何通過緩存+SQL修改優化慢查詢

    SQL優化

    查詢優化可以從兩個方面進行:

    • 根據高頻的查詢case,遵循最左匹配原則,設置對應的索引或聯合索引

    • 通過了解業務場景,看看能否將一些小SQL合并成大SQL

    “如何通過緩存+SQL修改優化慢查詢”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    sql
    AI

    博湖县| 平顺县| 弥勒县| 合江县| 彭阳县| 松桃| 黄冈市| 荥阳市| 海宁市| 正镶白旗| 康平县| 湟源县| 德州市| 新闻| 绥棱县| 托克逊县| 东阳市| 桂平市| 城市| 肥东县| 南溪县| 格尔木市| 元朗区| 中宁县| 阜新| 巴马| 吴川市| 云梦县| 清水河县| 忻州市| 汉沽区| 桐梓县| 通江县| 邹平县| 靖宇县| 奎屯市| 义马市| 东丽区| 孟津县| 手机| 扬中市|