亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

redis緩存穿透解決方法

 更新時間:2019年06月24日 17:16:01   投稿:laozhang  
在本篇文章里小編給大家分享了關(guān)于redis緩存穿透的解決方法以及相關(guān)實例內(nèi)容,需要的朋友們學(xué)習(xí)下。

緩存技術(shù)可以用來減輕數(shù)據(jù)庫的壓力,提升訪問效率。目前在企業(yè)項目中對緩存也是越來越重視。但是緩存不是說隨隨便便加入項目就可以了。將緩存整合到項目中,這才是第一步。而緩存帶來的穿透問題,進而導(dǎo)致的雪蹦問題都是我們迫切需要解決的問題。本篇文章將我平時項目中的解決方案分享給大家,以供參考。

一、緩存穿透的原理

緩存的正常使用如圖:

20180507174845.png

如圖所示,緩存的使用流程:

1、先從緩存中取數(shù)據(jù),如果能取到,則直接返回數(shù)據(jù)給用戶。這樣不用訪問數(shù)據(jù)庫,減輕數(shù)據(jù)庫的壓力。

2、如果緩存中沒有數(shù)據(jù),就會訪問數(shù)據(jù)庫。

這里面就會存在一個BUG,如圖:

20180507174951.png

如圖,緩存就像是數(shù)據(jù)庫的一道防火墻,將請求比較頻繁的數(shù)據(jù)放到緩存中,從而減輕數(shù)據(jù)庫的壓力。 但是如果有人惡意攻擊,那就很輕松的穿透你的緩存,將所有的壓力都給數(shù)據(jù)庫。比如上圖,你緩存的key都是正整數(shù),但是我偏偏使用負(fù)數(shù)作為key訪問你的緩存,這樣就會導(dǎo)致穿透緩存,將壓力直接給數(shù)據(jù)庫。

二、導(dǎo)致緩存穿透的原因

緩存穿透的問題,肯定是再大并發(fā)情況下。依此為前提,我們分析緩存穿透的原因如下:

1、惡意攻擊,猜測你的key命名方式,然后估計使用一個你緩存中不會有的key進行訪問。

2、第一次數(shù)據(jù)訪問,這時緩存中還沒有數(shù)據(jù),則并發(fā)場景下,所有的請求都會壓到數(shù)據(jù)庫。

3、數(shù)據(jù)庫的數(shù)據(jù)也是空,這樣即使訪問了數(shù)據(jù)庫,也是獲取不到數(shù)據(jù),那么緩存中肯定也沒有對應(yīng)的數(shù)據(jù)。這樣也會導(dǎo)致穿透。

三、解決緩存穿透

緩存穿透在于一步步規(guī)避穿透的原因,如圖:

Redis避免緩存穿透的解決方案.png

如上圖所示,解決的步驟如下:

1、再web服務(wù)器啟動時,提前將有可能被頻繁并發(fā)訪問的數(shù)據(jù)寫入緩存?!@樣就規(guī)避大量的請求在第3步出現(xiàn)排隊阻塞。

2、規(guī)范key的命名,并且統(tǒng)一緩存查詢和寫入的入口。這樣,在入口處,對key的規(guī)范進行檢測。–這樣保存惡意的key被攔截。

3、Synchronized雙重檢測機制,這時我們就需要使用同步(Synchronized)機制,在同步代碼塊前查詢一下緩存是否存在對應(yīng)的key,然后同步代碼塊里面再次查詢緩存里是否有要查詢的key。 這樣“雙重檢測”的目的,還是避免并發(fā)場景下導(dǎo)致的沒有意義的數(shù)據(jù)庫的訪問(也是一種嚴(yán)格避免穿透的方案)。

這一步會導(dǎo)致排隊,但是第一步中我們說過,為了避免大量的排隊,可以提前將可以預(yù)知的大量請求提前寫入緩存。

4、不管數(shù)據(jù)庫中是否有數(shù)據(jù),都在緩存中保存對應(yīng)的key,值為空就行。–這樣是為了避免數(shù)據(jù)庫中沒有這個數(shù)據(jù),導(dǎo)致的平凡穿透緩存對數(shù)據(jù)庫進行訪問。

5、第4步中的空值如果太多,也會導(dǎo)致內(nèi)存耗盡。導(dǎo)致不必要的內(nèi)存消耗。這樣就要定期的清理空值的key。避免內(nèi)存被惡意占滿。導(dǎo)致正常的功能不能緩存數(shù)據(jù)。

相關(guān)文章

  • redis序列化及各種序列化情況劃分

    redis序列化及各種序列化情況劃分

    本文主要介紹了redis序列化及各種序列化情況劃分,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • Redis數(shù)據(jù)結(jié)構(gòu)之鏈表詳解

    Redis數(shù)據(jù)結(jié)構(gòu)之鏈表詳解

    大家好,本篇文章主要講的是Redis數(shù)據(jù)結(jié)構(gòu)之鏈表詳解,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • Redis?Lua同步鎖實現(xiàn)源碼解析

    Redis?Lua同步鎖實現(xiàn)源碼解析

    這篇文章主要為大家介紹了Redis?Lua同步鎖實現(xiàn)源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • Redis緩存空間優(yōu)化實踐詳解

    Redis緩存空間優(yōu)化實踐詳解

    緩存Redis,是我們最常用的服務(wù),其適用場景廣泛,被大量應(yīng)用到各業(yè)務(wù)場景中。也正因如此,緩存成為了重要的硬件成本來源,我們有必要從空間上做一些優(yōu)化,降低成本的同時也會提高性能,本文通過代碼示例介紹了redis如何優(yōu)化緩存空間,需要的朋友可以參考一下
    2023-04-04
  • Redis設(shè)置鍵的生存時間或過期時間的方法詳解

    Redis設(shè)置鍵的生存時間或過期時間的方法詳解

    這篇文章主要介紹了Redis如何設(shè)置鍵的生存時間或過期時間,通過EXPIRE命令或者PEXIPIRE命令,客戶端可以以秒或者毫秒精度為數(shù)據(jù)庫中的某個鍵設(shè)置生存時間,文中有詳細(xì)的代碼供供大家參考,需要的朋友可以參考下
    2024-03-03
  • Redis中鍵的過期刪除策略深入講解

    Redis中鍵的過期刪除策略深入講解

    這篇文章主要給大家介紹了關(guān)于Redis中鍵的過期刪除策略的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-09-09
  • Windows下Redis的安裝使用圖解

    Windows下Redis的安裝使用圖解

    Redis是一個key-value存儲系統(tǒng)。Redis的出現(xiàn),很大程度補償了memcached這類key/value存儲的不足,在部分場合可以對關(guān)系數(shù)據(jù)庫起到很好的補充作用。這篇文章小編為大家分享了在Windows下進行安裝和使用Redis的技巧。
    2015-09-09
  • Redis數(shù)據(jù)導(dǎo)入導(dǎo)出以及數(shù)據(jù)遷移的4種方法詳解

    Redis數(shù)據(jù)導(dǎo)入導(dǎo)出以及數(shù)據(jù)遷移的4種方法詳解

    這篇文章主要介紹了Redis數(shù)據(jù)導(dǎo)入導(dǎo)出以及數(shù)據(jù)遷移的4種方法詳解,需要的朋友可以參考下
    2020-02-02
  • Redis批量刪除指定前綴的Key兩種方法

    Redis批量刪除指定前綴的Key兩種方法

    redis作為緩存服務(wù)器在項目中經(jīng)常使用,使用redis存儲數(shù)據(jù)時,我們經(jīng)常會將key分組,這篇文章主要給大家介紹了關(guān)于Redis批量刪除指定前綴的Key兩種方法,需要的朋友可以參考下
    2024-01-01
  • Redis7.0部署集群的實現(xiàn)步驟

    Redis7.0部署集群的實現(xiàn)步驟

    本文主要介紹了Redis7.0部署集群的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06

最新評論