項目中爲什麼要使用redis

你的項目中爲什麼要使用redis呢,相信主要是從性能和併發考慮。

優點

1.純內存操作
2.單線程操作,避免了頻繁的上下文切換
3.採用了非阻塞I\O多路複用機制

對於變動較少的數據,或者查詢時間比較長的數據,我們可以將查詢結果緩存到redis,這樣請求就能夠迅速響應。特別是秒殺系統,在這種高併發情況下,可以有效緩解數據庫壓力。

常見問題

1.緩存和數據庫數據一致性問題
2.緩存雪崩問題
3.緩存擊穿問題
4.緩存的併發競爭問題

內存淘汰策略

如果你的redis只能存儲5G的數據,可是你寫了10G,那麼就會刪除5G的數據,那麼redis背後的數據淘汰策略就是—LRU算法,這個可以在redis.conf配置文件進行配置。

數據一致性

一致性問題分爲最終一致性和強一致性,數據庫和緩存雙寫數據,必然會帶來數據一致性問題,如果對數據有強一致性要求,那麼不建議放入緩存,我們只能保證最終一致性。

緩存穿透

緩存穿透即請求的數據緩存中不存在,導致所有的請求都到達數據庫上,導致數據庫異常。
1.利用互斥鎖,緩存失效則要請求互斥鎖去請求數據庫,沒得到鎖的請求只能等待,另外需要在獲取鎖後,重新查看緩存是否已經被先前的請求設置成功,這樣可以保證等待的請求可以重新從緩存中讀取數據,而不是所有等待的請求都要請求數據庫。
2.異步更新策略。無論是否讀到數據都直接返回,如果沒有讀到值,則異步起一個線程去更新緩存。需要做緩存預熱即項目啓動前先加載緩存。

緩存雪崩

緩存雪崩即大量key同時過期,導致大量請求都請求到數據庫,導致數據庫異常。
1.給緩存的key增加一個隨機時間值,避免集體失效過期。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章