用緩存,主要有兩個用途:高性能、高并發(fā)。
高性能
一個請求過來,操作 mysql,查出一個結(jié)果,耗時 600ms。但是這個結(jié)果可能接下來幾個小時都不會變了,或者變了也可以不用立即反饋給用戶。
600ms 查出來的結(jié)果,放緩存里,一個 key 對應(yīng)一個 value,下次再查,直接從緩存里,通過一個 key 查出來一個 value,2ms。性能提升 300 倍。
就是說對于一些需要復(fù)雜操作耗時查出來的結(jié)果,且確定后面不怎么變化,但是有很多讀請求,那么直接將查詢出來的結(jié)果放在緩存中,后面直接讀緩存就好。
高并發(fā)
mysql 數(shù)據(jù)庫設(shè)計不是做高并發(fā)的。mysql 單機(jī)支撐到 2000QPS 開始報警了。
所以系統(tǒng)高峰期一秒鐘的請求有 1 萬,那一mysql 單機(jī)會掛掉。這個時候只能上緩存,把很多數(shù)據(jù)放緩存。緩存功能簡單,就是 key-value 式操作,單機(jī)支撐的并發(fā)量一秒幾萬十幾萬,支撐高并發(fā)。單機(jī)承載并發(fā)量是 mysql 單機(jī)的幾十倍。
緩存是內(nèi)存的,內(nèi)存支撐高并發(fā)。
用了緩存之后會有什么不良后果?
常見的緩存問題有以下幾個:
緩存與數(shù)據(jù)庫雙寫不一致
緩存雪崩、緩存穿透、緩存擊穿
緩存并發(fā)競爭