精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

面試題:什么是緩存擊穿、緩存穿透和緩存雪崩?它們分別會帶來什么危害?該如何解決和預防?

開發
緩存穿透是指查詢一個一定不存在的數據,由于緩存是不命中時需要從數據庫查詢,查不到數據則不寫入緩存,這將導致這個不存在的數據每次請求都要到數據庫去查詢,造成緩存穿透。

一、面試官:請說說看什么是緩存擊穿,他會帶來什么危害,以及該如何解決?

1.緩存擊穿

(1) 定義:緩存擊穿是指在高并發訪問下,某個熱點數據的緩存過期失效,而此時恰好有大量并發請求訪問該數據,導致這些請求直接繞過緩存,訪問后端數據庫或存儲系統,使數據庫或存儲系統負載急劇增加,甚至可能引發系統崩潰的現象。

(2) 危害:

  • 數據庫壓力增大:大量請求直接訪問數據庫,可能導致數據庫負載過高,響應時間延長,甚至引發數據庫崩潰。
  • 系統性能下降:由于數據庫處理請求的速度遠低于緩存,因此緩存擊穿會導致系統整體性能下降。

(3) 解決方案:

① 互斥鎖(Mutex)和分布式鎖(在分布式系統中):

在緩存失效時,使用互斥鎖機制確保只有一個請求能夠訪問數據庫并更新緩存,其他請求則等待鎖釋放后從緩存中獲取數據。

下面是一個使用 Redis 分布式鎖和 Redis 事務來解決緩存擊穿問題的具體代碼示例(Python實現)。


import redis
import time
import uuid

# 連接到 Redis 服務器
redis_client = redis.StrictRedis(host='localhost', port=6379, db=0)

# 設置分布式鎖的鍵和過期時間(秒)
LOCK_KEY = 'cache_擊穿_lock'
LOCK_EXPIRE = 10  # 鎖的有效期,可以根據需要調整

# 緩存的鍵和值(示例)
CACHE_KEY = 'some_hot_data'

def acquire_lock(redis_client, lock_key, lock_value, expire):
    """
    嘗試獲取分布式鎖
    :param redis_client: Redis 客戶端
    :param lock_key: 鎖的鍵
    :param lock_value: 鎖的值(通常是唯一標識符)
    :param expire: 鎖的過期時間(秒)
    :return: 是否成功獲取鎖
    """
    while True:
        # 嘗試設置鎖,NX 表示只有鍵不存在時才設置,PX 表示過期時間(毫秒)
        result = redis_client.set(lock_key, lock_value, nx=True, px=expire * 1000)
        if result:
            return True
        # 休眠一小段時間后重試,避免忙等待
        time.sleep(0.01)

def release_lock(redis_client, lock_key, lock_value):
    """
    釋放分布式鎖
    :param redis_client: Redis 客戶端
    :param lock_key: 鎖的鍵
    :param lock_value: 鎖的值(必須是獲取鎖時使用的相同值)
    :return: 是否成功釋放鎖
    """
    # 使用 Lua 腳本確保原子性釋放鎖
    lua_script = """
    if redis.call("get", KEYS[1]) == ARGV[1] then
        return redis.call("del", KEYS[1])
    else
        return 0
    end
    """
    redis_client.eval(lua_script, 1, lock_key, lock_value)
    return True

def get_data_with_cache_and_lock(redis_client, cache_key):
    """
    使用緩存、分布式鎖和 Redis 事務獲取數據
    :param redis_client: Redis 客戶端
    :param cache_key: 緩存的鍵
    :return: 數據值或 None(如果數據不存在)
    """
    # 嘗試從緩存中獲取數據
    cache_value = redis_client.get(cache_key)
    if cache_value is not None:
        return cache_value.decode('utf-8')  # 假設數據是字符串類型

    # 嘗試獲取分布式鎖
    lock_value = str(uuid.uuid4())
    if acquire_lock(redis_client, LOCK_KEY, lock_value, LOCK_EXPIRE):
        try:
            # 使用 Redis 事務確保原子性
            pipe = redis_client.pipeline(True)
            try:
                # 嘗試再次從緩存中獲取數據(防止其他客戶端在獲取鎖后更新了緩存)
                pipe.watch(cache_key)
                cache_value = pipe.get(cache_key)
                if cache_value is not None:
                    pipe.unwatch()
                    pipe.reset()
                    return cache_value.decode('utf-8')

                # 從數據庫中獲取數據(模擬)
                # 在實際應用中,這里應該是訪問數據庫的邏輯
                data_from_db = "data_from_db"  # 假設從數據庫中獲取的數據

                # 更新緩存
                pipe.multi()
                pipe.set(cache_key, data_from_db)
                pipe.execute()

                # 返回從數據庫中獲取的數據
                return data_from_db

            except redis.WatchError:
                # 如果在事務執行過程中,緩存被其他客戶端更新,則重新嘗試獲取數據
                pass

        finally:
            # 釋放鎖
            release_lock(redis_client, LOCK_KEY, lock_value)

    # 如果無法獲取鎖或緩存仍然為空,則返回 None(或根據業務邏輯返回默認值)
    return None

# 示例調用
data = get_data_with_cache_and_lock(redis_client, CACHE_KEY)
print(f"獲取的數據: {data}")

② 熱點數據永不過期:

對于重要的熱點數據,可以設置其永不過期,以避免緩存過期引發的擊穿問題。

但需要注意數據更新時的及時性和準確性,以及可能帶來的內存占用問題。

③ 提前異步刷新緩存:

在緩存即將過期之前,通過定時任務或后臺線程提前異步加載緩存數據,確保在緩存失效之前已經有新的數據加載到緩存中。

二、面試官:再說說看什么是緩存穿透,如何檢測是否存在緩存穿透,以及該如何解決?

緩存穿透是指查詢一個一定不存在的數據,由于緩存是不命中時需要從數據庫查詢,查不到數據則不寫入緩存,這將導致這個不存在的數據每次請求都要到數據庫去查詢,造成緩存穿透。

如果數據庫查詢不到這條數據,則不會寫入緩存,這將導致這個不存在的數據每次請求都會去查詢數據庫,對數據庫造成很大的壓力。

緩存穿透通常是由惡意用戶或攻擊者請求不存在于緩存和后端存儲中的數據來發起的攻擊。

一般來說,緩存穿透一開始會由開發者發現系統接口變慢或監控告警發覺,再檢測系統日志證實。檢查數據庫訪問日志和緩存訪問日志,查看是否存在大量對不存在的鍵的查詢。這些查詢如果頻繁發生,那么很可能是緩存穿透。

另外,監控緩存的命中率。如果命中率突然下降,且伴隨著數據庫訪問量的增加,這可能是緩存穿透的征兆。

再者,可以分析系統接收到的請求參數,特別是那些明顯不符合業務邏輯的非法參數。

以下是兩種防止緩存穿透的策略:

1.布隆過濾器(Bloom Filter)

布隆過濾器是一種空間效率很高的數據結構,它利用多個哈希函數來將一個元素映射到一個位數組的多個位中。當查詢一個元素時,它會檢查對應的位是否都為1,如果是,則認為元素可能存在(注意是可能存在,因為存在哈希沖突的情況),否則認為元素一定不存在。

在緩存穿透的場景中,可以在查詢緩存之前先使用布隆過濾器檢查元素是否存在。如果布隆過濾器認為元素不存在,則直接返回一個錯誤信息或默認值,而不去查詢數據庫。這樣可以有效減少對數據庫的無效查詢。

布隆過濾器的缺點:

  • 誤判率:布隆過濾器通過多個哈希函數將元素映射到位數組中,因此存在哈希沖突的可能性。這意味著,當查詢一個元素時,布隆過濾器可能會誤判該元素存在(即位數組中對應的位都為1),而實際上該元素在數據庫中并不存在。雖然誤判率可以通過增加哈希函數數量和位數組長度來降低,但這也會增加計算復雜度和空間開銷。
  • 刪除困難:布隆過濾器不支持直接刪除元素。如果要從布隆過濾器中刪除一個元素,需要將其對應的所有位都重置為0。然而,這可能會影響其他元素的判斷,因為多個元素可能共享同一個位。因此,在實際應用中,布隆過濾器通常用于只讀場景或需要頻繁查詢但很少更新的場景。

2.空值緩存(并不推薦):

對于那些查詢結果為空的數據,也將其緩存起來,但設置一個較短的過期時間。這樣,當下次再次查詢這個不存在的數據時,可以直接從緩存中獲取空值,而不是去查詢數據庫。

控制緩存的缺點:

  • 額外的內存消耗:當數據庫中不存在某個數據時,系統仍然需要將其作為一個空值(或特殊標記)緩存起來。這會導致緩存中存儲大量的空值或特殊標記,從而占用額外的內存空間。如果這類空值數據過多,會顯著影響緩存的存儲效率和性能。
  • 數據不一致性:空值緩存的過期時間需要合理設置。如果過期時間設置得過長,當數據庫中實際數據發生變化(例如,原本不存在的數據被插入)時,緩存中的空值數據仍然有效,這會導致數據不一致的問題。相反,如果過期時間設置得過短,可能會頻繁觸發緩存失效和數據庫查詢,增加系統負擔。
  • 難以維護:空值緩存需要額外的邏輯來處理過期時間和數據更新等問題。這增加了系統的復雜性和維護成本。同時,由于空值數據在緩存中的存在,也可能導致緩存污染和命中率下降等問題。

三、面試官:什么是緩存雪崩,緩存雪崩產生的常見原因有哪些?

緩存雪崩是指在分布式系統中,緩存中的大量數據同時失效或過期,導致大量請求直接訪問數據庫或后端服務,造成系統性能急劇下降甚至癱瘓的現象。

這種現象通常會對系統造成災難性的影響,因為它會導致后端數據庫或服務承受巨大的壓力,可能引發服務不可用或數據丟失等問題。

雪崩和擊穿、熱key的問題不太?樣的是,他是指?規模的緩存都過期失效了。

緩存雪崩產生的常見原因主要包括以下幾點:

  • 緩存中大量key同時過期:如果系統中存在大量緩存數據的過期時間被設置為相同或相近,那么當這些緩存數據同時過期時,系統將無法從緩存中獲取數據,轉而直接訪問數據庫。這將導致數據庫承受巨大的訪問壓力,可能引發性能下降或崩潰。
  • 緩存服務器故障:緩存服務器作為系統中的關鍵組件,如果發生故障或宕機,將導致緩存數據無法被訪問。此時,系統同樣會轉向直接訪問數據庫,從而引發緩存雪崩。
  • 系統壓力增大:在高并發或大規模用戶訪問的情況下,系統壓力會急劇增大。如果此時緩存無法有效承載這些請求,或者緩存的命中率顯著下降,那么大量請求將直接落到數據庫上,從而引發緩存雪崩。

為了預防緩存雪崩的發生,可以采取以下措施:

  • 避免大量key同時過期:可以通過微調key的過期時間,使其有一定的相差間隔,從而避免大量key同時過期的場景。
  • 使用緩存降級策略:在緩存失效或訪問壓力過大的情況下,可以啟動降級策略,如返回默認值或錯誤信息,以減少對后端系統的壓力。
  • 緩存預熱:在系統啟動時,提前將部分或全部熱點數據加載到緩存中。
  • 后備緩存:使用二級緩存(如本地緩存)作為后備,當主緩存失效時,可以從后備緩存中獲取數據。
責任編輯:趙寧寧 來源: 程序員阿沛
相關推薦

2019-11-05 14:24:31

緩存雪崩框架

2020-09-14 06:57:30

緩存穿透雪崩

2021-06-05 09:01:01

Redis緩存雪崩緩存穿透

2020-12-28 12:37:36

緩存擊穿穿透

2019-10-12 14:19:05

Redis數據庫緩存

2023-03-10 13:33:00

緩存穿透緩存擊穿緩存雪崩

2022-03-08 00:07:51

緩存雪崩數據庫

2021-12-25 22:28:27

緩存穿透緩存擊穿緩存雪崩

2023-11-10 14:58:03

2020-03-16 14:57:24

Redis面試雪崩

2024-03-12 10:44:42

2022-05-27 07:57:20

緩存穿透緩存雪崩緩存擊穿

2020-10-23 10:46:03

緩存雪崩擊穿

2023-12-06 13:38:00

Redis緩存穿透緩存擊穿

2022-11-18 14:34:28

2025-06-30 01:55:00

2020-03-05 09:09:18

緩存原因方案

2023-04-14 07:34:19

2018-12-13 12:43:07

Redis緩存穿透

2025-05-28 02:25:00

高并發緩存穿透雪崩
點贊
收藏

51CTO技術棧公眾號

国产亚洲福利社区| 国产一区二区三区在线观看网站| 中文字幕在线乱| 精品国产999久久久免费| 激情久久中文字幕| 亚洲美女性视频| 在线播放av中文字幕| 免费不卡av| 欧美在线首页| 国产男女猛烈无遮挡| 精品久久蜜桃| 亚洲国产中文字幕久久网 | 无码人妻丰满熟妇啪啪网站| 毛片在线网址| 欧美韩日一区二区三区四区| www.成人av.com| 青青青国产在线| 久久精品色图| 亚洲女同av| 亚洲欧洲综合另类| 蜜桃麻豆www久久国产精品| 亚洲无码精品在线播放| 99热在线精品观看| 欧美精品制服第一页| av黄色在线免费观看| 成人免费直播在线| 欧美一区二区视频在线观看2022| 夫妻免费无码v看片| www久久日com| 中文字幕色av一区二区三区| 久久99欧美| 免费看日韩av| 国产成人午夜精品影院观看视频 | 国产一区二区三区精品久久久| 国产乱淫av麻豆国产免费| 91成人福利社区| 欧美视频在线一区| 日日摸天天爽天天爽视频| 99re6在线精品视频免费播放| 成人欧美一区二区三区| 亚洲精品一区二区三| 免费在线超碰| 91丨porny丨蝌蚪视频| 国产一区二区精品免费| 成人精品在线播放| 国产精品911| 51成人做爰www免费看网站| 一区二区三区免费在线| 蜜桃免费网站一区二区三区| 日本精品在线视频| 少妇太紧太爽又黄又硬又爽| 亚洲乱码久久| 97在线日本国产| 国产精品美女久久久久av爽| 一区二区毛片| 欧美亚洲在线视频| yjizz国产| 老司机一区二区三区| 欧美又大粗又爽又黄大片视频| 天天操天天摸天天干| 蜜桃伊人久久| 国产精品久久久久久久久男| 狠狠人妻久久久久久| 久久久蜜桃一区二区人| 51ⅴ精品国产91久久久久久| 日本中文字幕久久| 人禽交欧美网站| 成人动漫网站在线观看| 99久久精品国产一区色| 成人中文字幕电影| 精品国产乱码久久久久久108| 五月激情婷婷综合| 国产欧美久久久精品影院| 亚洲精品成人久久久998| 久久五月精品| 亚洲成人www| 妺妺窝人体色www在线小说| 人人视频精品| 欧美日韩国产片| www日本在线观看| 少妇久久久久| 色偷偷av亚洲男人的天堂| 懂色av懂色av粉嫩av| 99国产精品久久久久久久| 欧美一级电影免费在线观看| www.国产毛片| 久久成人精品无人区| 国产福利不卡| 国产三级在线| 亚洲一区二区综合| 久久久久久久少妇| 高清久久精品| 日韩精品视频在线观看免费| 人成免费在线视频| 影音先锋亚洲精品| 国产精品久久久久77777| www.成人在线观看| 久久精品欧美日韩精品| 777久久精品一区二区三区无码 | 精品国产精品自拍| 我看黄色一级片| 超碰地址久久| 色偷偷噜噜噜亚洲男人的天堂| 清纯粉嫩极品夜夜嗨av| 老司机午夜精品视频| 91精品国产综合久久久久久丝袜| 女人天堂在线| 亚洲亚洲精品在线观看| 蜜臀av免费观看| 牛牛影视久久网| 久久中文字幕视频| 亚洲s码欧洲m码国产av| 国产大陆a不卡| 亚洲一区高清| 欧美无毛视频| 亚洲白拍色综合图区| 麻豆精品国产免费| 性娇小13――14欧美| 不卡一区二区三区四区五区| av国产在线观看| 日韩欧美一区视频| 无码人妻精品一区二区三| 99久久这里只有精品| 国产精品电影久久久久电影网| 香蕉视频黄在线观看| 一区二区三区不卡在线观看 | 成人综合在线网站| 超碰在线免费观看97| 香蕉视频亚洲一级| 亚洲国产精品福利| 久久久国产成人| 韩国一区二区三区| 亚洲精品一区二| www.久久.com| 国产香蕉一区二区三区在线视频| 国产成人无码精品久久久久| 成人免费视频免费观看| 欧美少妇在线观看| 91精品麻豆| 精品精品国产国产自在线| 欧美性受xxx黑人xyx性爽| 91香蕉视频在线| 高清在线观看免费| 欧美a一欧美| 45www国产精品网站| 天天操天天射天天舔| 亚洲成a人v欧美综合天堂| 无码人妻一区二区三区在线| 亚洲国产导航| 久久久久久久久久久一区| 日韩激情电影免费看| 亚洲激情在线观看视频免费| 91国产丝袜播放在线| 99久久婷婷国产精品综合| 无码中文字幕色专区| 欧美偷窥清纯综合图区| 亚洲免费网址| 日本aⅴ大伊香蕉精品视频| 亚洲欧美综合一区二区| 日韩欧美成人免费视频| 四虎国产精品成人免费入口| 蜜臀久久99精品久久久久久9| 亚洲精品日韩精品| 国产不卡精品| 久久久影视精品| 日韩一区二区三区中文字幕| 一本到高清视频免费精品| 国产精品20p| 韩国一区二区视频| 国产真实老熟女无套内射| 欧美精品中文| 国产精品视频一| 黄色网页在线免费看| 亚洲电影免费观看高清完整版在线| 久久久久久久久久久久久久av| 国产午夜精品一区二区三区四区| 亚洲欧洲日本精品| 国产精品mm| 日本视频一区在线观看| 成人在线日韩| 欧洲亚洲女同hd| 中文字幕在线播放| 欧美不卡123| 色老头一区二区| 亚洲精品国产a| 国产男女猛烈无遮挡a片漫画| 免费美女久久99| 国产精品69久久久| 欧美三级美国一级| 日韩成人中文电影| 青青草久久网络| 欧美大胆成人| 九九久久国产精品| 裸体xxxx视频在线| 日韩一区二区三区视频| 少妇太紧太爽又黄又硬又爽| 亚洲欧洲99久久| 中文字幕av观看| 国产中文字幕一区| 日本精品一区二区三区四区| 偷拍欧美精品| 久久综合给合久久狠狠色| 日本免费成人| 2019日本中文字幕| h片在线免费| 中文字幕精品网| 欧美特黄一级视频| 在线不卡中文字幕播放| 亚洲另类在线观看| 亚洲一级不卡视频| 波多野结衣久久久久| 久久久久久99精品| 91人妻一区二区| 久久精品国产一区二区三| 自慰无码一区二区三区| 你懂的一区二区| 亚洲午夜在线观看| 欧美激情在线免费| 激情小说综合网| 亚洲开心激情| 92国产精品久久久久首页| 国产成人精品一区二三区在线观看 | 亚洲国产欧美日韩精品| 一级特黄aa大片| 在线观看免费视频综合| 一级片中文字幕| 亚洲va国产va欧美va观看| 日本精品人妻无码77777| 欧美激情综合网| 亚洲av无码一区二区三区人 | 欧美家庭影院| 久久久精品视频成人| 国产对白叫床清晰在线播放| 日韩电影在线观看中文字幕 | 女性女同性aⅴ免费观女性恋| 亚洲欧美自拍视频| 成人性视频免费网站| 男女污污视频网站| 久久99国产乱子伦精品免费| 午夜激情福利在线| 日韩精品三区四区| 91蝌蚪视频在线观看| 久久这里有精品15一区二区三区| 每日在线更新av| 在线视频亚洲| 各处沟厕大尺度偷拍女厕嘘嘘| 日韩亚洲精品在线| 免费无码毛片一区二三区| 亚洲高清毛片| 免费观看美女裸体网站| 国产视频一区三区| 国产日韩一区二区在线观看| 久久国产福利| 成人免费视频久久| 免费视频一区二区| 午夜精品久久久久久久99热影院| 国产主播一区二区| 国产sm在线观看| 成人av在线网| 中文字幕人妻一区二区| 久久蜜臀中文字幕| 卡一卡二卡三在线观看| 中文字幕色av一区二区三区| 麻豆明星ai换脸视频| 一区二区三区在线视频免费 | 欧美激情1区2区| 免费在线黄网站| 亚洲午夜黄色| 精品女同一区二区| 三级黄色在线观看| 亚洲乱码国产乱码精品精98午夜 | 成人精品一区二区三区校园激情| 最近2019年好看中文字幕视频 | 黄色av网站免费在线观看| 亚洲第一区第二区| 国产在线超碰| 麻豆成人在线看| h片在线观看下载| 国产成人在线一区二区| 高清久久精品| 久久国产日韩欧美| 久久亚洲成人| 少妇高潮喷水在线观看| 日本视频免费一区| 超碰人人cao| 久久久久久一二三区| 免费在线观看黄色小视频| 午夜亚洲福利老司机| 无码人妻丰满熟妇精品| 欧美在线看片a免费观看| 国内精品久久久久久久久久| 精品亚洲一区二区三区| 黄色在线视频网站| 午夜精品久久久久久久男人的天堂| 亚洲精品国产嫩草在线观看| 国产福利久久精品| 成人免费a**址| 日本黄xxxxxxxxx100| 久久一区中文字幕| www.色.com| 91麻豆国产香蕉久久精品| 91久久久久久久久久久久久久 | 一级特黄aa大片| 亚洲美女在线视频| 18网站在线观看| 国产精品一二三在线| 久久365资源| 综合久久国产| 日韩高清不卡一区二区| 9.1在线观看免费| 自拍偷拍国产亚洲| 天天爱天天做天天爽| 亚洲成人教育av| а√天堂官网中文在线| 国产精品18久久久久久麻辣| 成人在线视频中文字幕| 秋霞在线一区二区| 日本三级亚洲精品| www.久久av| 亚洲动漫第一页| www.黄色av| 久久av在线播放| 69久久久久久| 精品一区二区三区免费播放| 中文字幕免费看| 婷婷久久综合九色国产成人| www.成人精品| 美女精品视频一区| 亚洲欧美久久精品| 亚洲午夜精品久久久久久浪潮| 久久免费高清| 魔女鞋交玉足榨精调教| 欧美日韩免费一区| 色屁屁草草影院ccyycom| 欧美激情videos| 中文字幕日韩在线| 狠狠精品干练久久久无码中文字幕| 麻豆成人综合网| 亚洲激情图片网| 欧美日韩免费观看一区三区| 国产二区视频在线观看| 国产不卡精品视男人的天堂| 蜜桃一区二区三区| 免费男同深夜夜行网站| 久久久www免费人成精品| 国产91精品一区| 亚洲日本中文字幕免费在线不卡| 日韩深夜视频| 欧美日韩大片一区二区三区| 久久精品综合| 91导航在线观看| 欧美老女人在线| 新版中文在线官网| 国产原创精品| 香蕉久久久久久久av网站| 少妇久久久久久久久久| 91福利在线免费观看| av影片在线看| 91九色单男在线观看| 综合激情婷婷| 日韩女优在线视频| 欧美视频第一页| www视频在线观看免费| 成人午夜一级二级三级| 欧美日韩国产欧| 日韩免费高清一区二区| 色婷婷精品大在线视频| 成黄免费在线| 亚洲专区中文字幕| 亚洲人妖在线| 伊人影院综合网| 日韩欧美亚洲另类制服综合在线| 岛国毛片av在线| 日本欧美色综合网站免费| 精品一区二区三区的国产在线播放| 九九热精彩视频| 精品调教chinesegay| av久久网站| 男人添女荫道口女人有什么感觉| eeuss国产一区二区三区| 日韩欧美国产另类| 麻豆成人在线看| 九九久久婷婷| 污污视频在线免费| 精品国产乱码久久久久酒店 | 国产又大又黄又粗的视频| 国产精品久久久久aaaa樱花| 午夜精品一区二区三| 日韩美女免费视频| 欧美va天堂在线| 摸摸摸bbb毛毛毛片| 日韩精品中文字幕在线一区| 老司机成人影院| 喜爱夜蒲2在线| 国产三级精品视频| 亚洲精品97久久中文字幕无码| 国产精品678| 亚洲毛片网站| 日韩一区二区不卡视频| 亚洲精品有码在线|