99re热这里只有精品视频,7777色鬼xxxx欧美色妇,国产成人精品一区二三区在线观看,内射爽无广熟女亚洲,精品人妻av一区二区三区

OpenResty LuaRestyLock

2021-08-13 10:18 更新

緩存失效風(fēng)暴

看下這個段偽代碼:

local value = get_from_cache(key)
if not value then
    value = query_db(sql)
    set_to_cache(value, timeout = 100)
end
return value

看上去沒有問題,在單元測試情況下,也不會有異常。

但是,進行壓力測試的時候,你會發(fā)現(xiàn),每隔 100 秒,數(shù)據(jù)庫的查詢就會出現(xiàn)一次峰值。如果你的 cache 失效時間設(shè)置的比較長,那么這個問題被發(fā)現(xiàn)的機率就會降低。

為什么會出現(xiàn)峰值呢?想象一下,在 cache 失效的瞬間,如果并發(fā)請求有 1000 條同時到了 query_db(sql) 這個函數(shù)會怎樣?沒錯,會有 1000 個請求打向數(shù)據(jù)庫。這就是緩存失效瞬間引起的風(fēng)暴。它有一個英文名,叫 "dog-pile effect"。

怎么解決?自然的想法是發(fā)現(xiàn)緩存失效后,加一把鎖來控制數(shù)據(jù)庫的請求。具體的細節(jié),春哥在 lua-resty-lock 的文檔里面做了詳細的說明,我就不重復(fù)了,請看這里。多說一句,lua-resty-lock 庫本身已經(jīng)替你完成了 wait for lock 的過程,看代碼的時候需要注意下這個細節(jié)。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號