Redis的使用中會遇到的問題

一、Redis與數據庫的雙一致性問題

描述:

在某些特定環境下,無論是先更新Redis還是更新數據庫,兩者的數據都有可能不一致。

解決方案:

在網上搜索,有人給出在數據更新前後均刪除緩存,同時在更新數據庫後線程休眠一段時間,還有其他的一些的方案均很大程度上的影響的性能。

對於一些強一致性問題的數據,就不要放在緩存中了。其他的比如商品的價格,只需要在結算的保證商品價格正確無誤即可,其他時候商品價格的正確率並不一定需要達到100%。

二、緩存穿透

描述:

當黑客不斷請求緩存和數據庫均不存在的數據的時候,這個時候會導致數據庫連接異常。

解決方案:

  1. 接口層增加校驗,如用戶鑑權校驗,或者對id做基礎校驗,id<=0的直接攔截;
  2. 從緩存取不到的數據,在數據庫中也沒有取到,這時也可以將key-value對寫爲key-null,緩存有效時間可以設置短點,如30秒(設置太長會導致正常情況也沒法使用)。這樣可以防止攻擊用戶反覆用同一個id暴力攻擊。

三、緩存擊穿

描述:

緩存擊穿是指訪問緩存中沒有但數據庫中有的數據(一般是緩存時間到期),多用戶的併發操作引起數據庫壓力增大

解決方案:

  1. 設置熱點數據永遠不過期。
  2. 加分佈式鎖,讓未獲取到分佈式鎖的線程自旋操作,緩解數據庫的壓力。分佈式鎖的實現方案參考:https://hucheng.blog.csdn.net/article/details/106020884

四、緩存雪崩

描述:

緩存雪崩是指緩存中數據同事大批量到過期時間,引起數據庫壓力增大

解決方案:

  1. 緩存數據的過期時間設置隨機,防止同一時間大量數據過期現象發生
  2. 如果緩存數據庫是分佈式部署,將熱點數據均勻分佈在不同搞得緩存數據庫中
  3. 設置熱點數據永遠不過期

五、利用Redis防止表單重複提交

跳轉到表單頁面的時候,服務器生成一個唯一token保存到redis中,同時將token返回給頁面,並存到<input type="hidden">標籤中,當表單提交的時候,請求比對錶單提交的tokenredis取到的token數據是否一致。如果一致,刪除Redis中的token並執行正常操作;若不一致則刪除。

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