最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Redis緩存穿透出現(xiàn)原因及解決方案

 更新時(shí)間:2020年08月04日 10:16:11   作者:Tracydzf  
這篇文章主要介紹了Redis緩存穿透出現(xiàn)原因及解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

在并發(fā)式的項(xiàng)目當(dāng)中,一定要考慮一個(gè)緩存穿透的情況。那么什么是緩存穿透呢?簡(jiǎn)單的說(shuō)來(lái),就是當(dāng)大量請(qǐng)求的key根本不在緩存當(dāng)中,所以導(dǎo)致了請(qǐng)求直接到了數(shù)據(jù)庫(kù)上,根本沒(méi)有經(jīng)過(guò)緩存這一層。比如一個(gè)黑客故意制造我們緩存中不存在的key發(fā)送大量的請(qǐng)求,就會(huì)導(dǎo)致請(qǐng)求直接落到數(shù)據(jù)庫(kù)上。

也就是說(shuō),緩存穿透就是:1.緩存層不命中。2,存儲(chǔ)層不命中,不將空的結(jié)果寫回緩存。3,返回空結(jié)果給客戶端。

一般mysql的默認(rèn)最大連接數(shù)是150左右,當(dāng)然這個(gè)是可以用show variables like ‘%max_connections%'命令來(lái)查看。

當(dāng)然這只是一個(gè)指標(biāo),cpu磁盤內(nèi)存網(wǎng)絡(luò)等等原因都影響了他的并發(fā)能力,所以一般3000的并發(fā)請(qǐng)求就可以殺死大部分的數(shù)據(jù)庫(kù)。

那么出現(xiàn)緩存穿透的時(shí)候需要怎么應(yīng)對(duì)呢?

1)最基本的方式就是做好參數(shù)校檢,比如不合法的請(qǐng)求就直接拋出異常信息給客戶端,就比如設(shè)置查詢條件id不能小于0或者傳入郵箱格式不正確時(shí)直接返回錯(cuò)誤消息給客戶端。但是這樣還是會(huì)出現(xiàn)緩存穿透的現(xiàn)象。那么還可以通過(guò)下面幾個(gè)方案來(lái)解決:

2)緩存無(wú)效的key,如果數(shù)據(jù)庫(kù)和緩存都找不到某個(gè)key的數(shù)據(jù),就直接寫一個(gè)到redis中并設(shè)置它的過(guò)期時(shí)間 set key value EX 10086。這種方式可以解決請(qǐng)求的key變化不頻繁的情況,如果遇到專門的黑客攻擊就不能解決這個(gè)情況。但是如果依然想用這個(gè)方法的話,那么在設(shè)置過(guò)期時(shí)間的時(shí)候,時(shí)間短一點(diǎn),比如是一分鐘。多說(shuō)一句設(shè)置key的格式一般是:表名:列名:主鍵名:主鍵。

3)利用布隆過(guò)濾器:布隆過(guò)濾器是一個(gè)非常神奇的數(shù)據(jù)結(jié)構(gòu),通過(guò)這個(gè)過(guò)濾器可以幫助我們非常方便的去判斷一個(gè)給定的數(shù)據(jù)是否存在于海量的數(shù)據(jù)當(dāng)中。所以布隆過(guò)濾器在針對(duì)數(shù)據(jù)去重和驗(yàn)證數(shù)據(jù)的合法性時(shí)是非常有用的,布隆過(guò)濾器的實(shí)質(zhì)就是一個(gè)bit(位)數(shù)組。也就是說(shuō)每一個(gè)存進(jìn)的數(shù)據(jù)都僅僅只占一位,在數(shù)據(jù)結(jié)構(gòu)上來(lái)說(shuō)相當(dāng)于List、Map、Set等數(shù)據(jù)結(jié)構(gòu),但是占用的空間更少而且效率更高,但是缺點(diǎn)是它返回的值是概率性的,并不是多么的準(zhǔn)確。當(dāng)一個(gè)元素加入到布隆過(guò)濾器的時(shí)候:1.使用布隆過(guò)濾器當(dāng)中的哈希函數(shù)對(duì)元素值進(jìn)行計(jì)算,得到哈希值。2.根據(jù)得到的哈希值,在位數(shù)組中把對(duì)應(yīng)的下標(biāo)改為1。那么設(shè)置完成之后,我們要怎么判斷一個(gè)元素是否存在于布隆過(guò)濾器當(dāng)中呢?

首先我們要根據(jù)給定的元素再次進(jìn)行hash計(jì)算;得到值之后判斷數(shù)組中的每個(gè)元素是否都為1,如果值都為1的話,那么說(shuō)明這個(gè)值在過(guò)濾器當(dāng)中,如果不為1的話,就說(shuō)明不再過(guò)濾器當(dāng)中。

舉個(gè)非常簡(jiǎn)單的例子

如上圖所示,當(dāng)字符串要加入到布隆過(guò)濾器當(dāng)中時(shí),該事務(wù)首先由多個(gè)哈希函數(shù)生成不同的哈希值,然后在對(duì)應(yīng)的位數(shù)組的下標(biāo)的元素設(shè)置位1,當(dāng)二次存儲(chǔ)相同的字符串時(shí),因?yàn)橄惹暗膶?duì)應(yīng)位置已經(jīng)存在,所以在去重的時(shí)候非常方便。如果我們需要判斷某個(gè)字符串是否在布隆過(guò)濾器當(dāng)中時(shí),只需要對(duì)給定的字符串再次進(jìn)行相同的哈希計(jì)算,得到的值判斷是否為1,從而判斷數(shù)據(jù)是否存在于布隆過(guò)濾器當(dāng)中,那么假如布隆過(guò)濾器說(shuō)明一個(gè)數(shù)據(jù)存在時(shí),很小的概率會(huì)誤判,但是如果說(shuō)明一個(gè)數(shù)據(jù)不存在時(shí),那么一定是不存在的。

那么通過(guò)這個(gè)原理,利用redis布隆過(guò)濾器來(lái)將所有可能存在請(qǐng)求的值放在布隆過(guò)濾器當(dāng)中,當(dāng)用戶請(qǐng)求時(shí),直接判斷用戶發(fā)送來(lái)的請(qǐng)求是否存在于布隆過(guò)濾器中,不存在的話,直接返回請(qǐng)求參數(shù)錯(cuò)誤信息給客戶,存在的話就繼續(xù)往下面走流程。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Redis緩存的主要異常及解決方案實(shí)例

    Redis緩存的主要異常及解決方案實(shí)例

    這篇文章主要為大家介紹了Redis緩存的主要異常及解決方案實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • Redis概述及l(fā)inux安裝redis的詳細(xì)教程

    Redis概述及l(fā)inux安裝redis的詳細(xì)教程

    這篇文章主要介紹了Redis概述及l(fā)inux安裝redis的詳細(xì)教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10
  • Redis安裝與使用方法小結(jié)

    Redis安裝與使用方法小結(jié)

    這篇文章主要介紹了Redis安裝與使用方法,結(jié)合實(shí)例形式分析了Redis數(shù)據(jù)庫(kù)的下載、安裝、啟動(dòng)、設(shè)置及相關(guān)使用操作注意事項(xiàng),需要的朋友可以參考下
    2018-04-04
  • Redis中的zset類型詳解

    Redis中的zset類型詳解

    有序集合zset保留了set集合不能有重復(fù)成員的特點(diǎn),但與set集合不同的是,zset的每個(gè)member都有一個(gè)唯一的浮點(diǎn)數(shù)類型的分?jǐn)?shù)score與之關(guān)聯(lián),這篇文章主要介紹了Redis的zset類型,需要的朋友可以參考下
    2023-08-08
  • Redis實(shí)現(xiàn)布隆過(guò)濾器的代碼詳解

    Redis實(shí)現(xiàn)布隆過(guò)濾器的代碼詳解

    布隆過(guò)濾器(Bloom?Filter)是Redis?4.0版本提供的新功能,它被作為插件加載到Redis服務(wù)器中,給Redis提供強(qiáng)大的去重功能,本文將給大家詳細(xì)介紹一下Redis布隆過(guò)濾器,文中有相關(guān)的代碼示例,需要的朋友可以參考下
    2023-07-07
  • Redis?生成分布式業(yè)務(wù)單號(hào)的實(shí)現(xiàn)

    Redis?生成分布式業(yè)務(wù)單號(hào)的實(shí)現(xiàn)

    在業(yè)務(wù)系統(tǒng)中很多場(chǎng)景下需要生成不重復(fù)的ID,本文主要介紹了Redis生成分布式業(yè)務(wù)單號(hào)的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-04-04
  • Redis?存儲(chǔ)對(duì)象信息用?Hash?和String的區(qū)別

    Redis?存儲(chǔ)對(duì)象信息用?Hash?和String的區(qū)別

    這篇文章主要介紹了Redis存儲(chǔ)對(duì)象信息用Hash和String的區(qū)別,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-09-09
  • 淺談redis加鎖常用幾種方式

    淺談redis加鎖常用幾種方式

    這篇文章主要介紹了淺談redis加鎖常用幾種方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Python利用redis限制用戶重復(fù)刷新帶來(lái)的數(shù)據(jù)問(wèn)題

    Python利用redis限制用戶重復(fù)刷新帶來(lái)的數(shù)據(jù)問(wèn)題

    在網(wǎng)站開發(fā)中,我們經(jīng)常會(huì)遇到需要控制用戶重復(fù)刷新頁(yè)面的情況,本文就來(lái)介紹了Python利用redis限制用戶重復(fù)刷新帶來(lái)的數(shù)據(jù)問(wèn)題,感興趣的可以了解一下
    2024-03-03
  • Redis和Lua實(shí)現(xiàn)分布式限流器的方法詳解

    Redis和Lua實(shí)現(xiàn)分布式限流器的方法詳解

    這篇文章主要給大家介紹了關(guān)于Redis和Lua實(shí)現(xiàn)分布式限流器的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Redis和Lua具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06

最新評(píng)論

类乌齐县| 巴林右旗| 左贡县| 文水县| 瓦房店市| 工布江达县| 内乡县| 阜阳市| 沙雅县| 望奎县| 小金县| 化德县| 老河口市| 左云县| 淮南市| 华容县| 昂仁县| 兴山县| 山阴县| 陆河县| 九龙县| 宿迁市| 明溪县| 辽源市| 沈阳市| 浦江县| 宜阳县| 抚远县| 友谊县| 建昌县| 陆川县| 宁海县| SHOW| 安西县| 云龙县| 昌乐县| 抚松县| 南乐县| 思南县| 白山市| 清水河县|