Redis缓存,你真的懂了吗
為什么要用緩存(緩存的優點、場景)
(1)在項目中緩存是如何使用的?
結合你自己項目的業務來,你如果用了那恭喜你,你如果沒用那不好意思,你硬加也得加一個場景吧!
(2)為啥在項目里要用緩存呢?
用緩存,主要是倆用途,
- 高性能:一些復雜操作耗時查出來的結果,如果確定后面不咋變了,然后但是馬上還有很多讀請求,那么直接結果放緩存,后面直接讀緩存就好了。
- 高并發:高峰期一秒鐘過來的請求有1萬,那一個mysql單機絕對會死掉。你這個時候就只能上緩存,把很多數據放緩存,別放mysql。緩存功能簡單,說白了就是key-value式操作,單機支撐的并發量輕松一秒幾萬十幾萬,支撐高并發so easy。單機承載并發量是mysql單機的幾十倍。
用了緩存后會有什么問題?如何解決或者避免
1)緩存與數據庫雙寫不一致
2)緩存雪崩
3)緩存穿透
4)緩存并發競爭
Redis的過期策略
redis的過期策略都有哪些?內存淘汰機制都有哪些?
啥叫緩存?用內存當緩存。內存是無限的嗎,內存是很寶貴而且是有限的,磁盤是廉價而且是大量的。可能一臺機器就幾十個G的內存,但是可以有幾個T的硬盤空間。redis主要是基于內存來進行高性能、高并發的讀寫操作的。緩存的一個最基本的概念,數據是會過期的,要么是你自己設置個過期時間,要么是redis自己給干掉。
如果假設你設置一個一批key只能存活1個小時,那么接下來1小時后,redis是怎么對這批key進行刪除的?
答案是:定期刪除+惰性刪除
所謂定期刪除,指的是redis默認是每隔100ms就隨機抽取一些設置了過期時間的key,檢查其是否過期,如果過期就刪除。假設redis里放了10萬個key,都設置了過期時間,你每隔幾百毫秒,就檢查10萬個key,那redis基本上就死了,cpu負載會很高的,消耗在你的檢查過期key上了。注意,這里可不是每隔100ms就遍歷所有的設置過期時間的key,那樣就是一場性能上的災難。實際上redis是每隔100ms隨機抽取一些key來檢查和刪除的。
問題:定期刪除可能會導致很多過期key到了時間并沒有被刪除掉,那咋整呢?所以就是惰性刪除了。這就是說,在你獲取某個key的時候,redis會檢查一下 ,這個key如果設置了過期時間那么是否過期了?如果過期了此時就會刪除,不會給你返回任何東西。并不是key到時間就被刪除掉,而是你查詢這個key的時候,redis再懶惰的檢查一下
通過上述兩種手段結合起來,保證過期的key一定會被干掉。
如果定期刪除漏掉了很多過期key,然后你也沒及時去查,也就沒走惰性刪除,此時會怎么樣?如果大量過期key堆積在內存里,導致redis內存塊耗盡了,咋整?
答案是:走內存淘汰機制。
?
總結
以上是生活随笔為你收集整理的Redis缓存,你真的懂了吗的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 应用数学软件测试题,高等数学第六章定积分
- 下一篇: python离线录音转文字软件_有能把录