redis 第 13 篇 工作記錄-在專案中快取是如何使用的?快取如果使用不當會造成什麼後果?
針對每一個技術,必須具備深入的瞭解,這個技術的更新活躍度,使用這個技術的優點,使用這個技術的缺點,不使用的缺點以及優點。如果不這樣的話,智只能說明自己平時思考的太少了,只知道幹活。
(1)為啥要使用快取
用快取,主要是倆用途,高效能和高併發
高效能
假設這麼個場景,你有個操作,一個請求過來,吭哧吭哧你各種亂七八糟操作mysql,半天查出來一個結果,耗時600ms。但是這個結果可能接下來幾個小時都不會變了,或者變了也可以不用立即反饋給使用者。那麼此時咋辦?
快取啊,折騰600ms查出來的結果,扔快取裡,一個key對應一個value,下次再有人查,別走mysql折騰600ms了。直接從快取裡,通過一個key查出來一個value,2ms搞定。效能提升300倍。
這就是所謂的高效能。
就是把你一些複雜操作耗時查出來的結果,如果確定後面不咋變了,然後但是馬上還有很多讀請求,那麼直接結果放快取,後面直接讀快取就好了。
高併發
mysql這麼重的資料庫,壓根兒設計不是讓你玩兒高併發的,雖然也可以玩兒,但是天然支援不好。mysql單機支撐到2000qps也開始容易報警了。
所以要是你有個系統,高峰期一秒鐘過來的請求有1萬,那一個mysql單機絕對會死掉。你這個時候就只能上快取,把很多資料放快取,別放mysql。快取功能簡單,說白了就是key-value式操作,單機支撐的併發量輕鬆一秒幾萬十幾萬,支撐高併發so easy。單機承載併發量是mysql單機的幾十倍。
而我們平時的專案中,用快取主要解決的是高效能的場景,高併發呀。(恐怕只有淘寶,拼多多,京東了吧)。
用了快取之後會有啥不良的後果?
呵呵。。。你要是沒考慮過這個問題,那你就尷尬了,這說明你 四肢也不發達。你別光是傻用一個東西,多考慮考慮背後的一些事兒。
常見的快取問題有仨(當然其實有很多,我這裡就說仨,你能說出來也可以了)
1)快取與資料庫雙寫不一致
2)快取雪崩
3)快取穿透
4)快取併發競爭
這仨問題是常見面試題,後面我要講,大家看到後面自然就知道了,並且給出對應的解決方案