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

redis的常見(jiàn)用法和問(wèn)題之緩存擊穿、緩存穿透、緩存雪崩詳解

 更新時(shí)間:2026年05月07日 09:55:07   作者:無(wú)籽西瓜a  
在現(xiàn)代高并發(fā)的互聯(lián)網(wǎng)應(yīng)用中,緩存技術(shù)已成為提升系統(tǒng)響應(yīng)速度與減輕后端數(shù)據(jù)庫(kù)壓力的關(guān)鍵手段,這篇文章主要介紹了redis的常見(jiàn)用法和問(wèn)題之緩存擊穿、緩存穿透、緩存雪崩的相關(guān)資料,需要的朋友可以參考下

本文為總結(jié)用于復(fù)習(xí)和查詢(xún)

包含redis的常用操作和緩存相關(guān)問(wèn)題

Redis定義

Redis存儲(chǔ)的是key-value結(jié)構(gòu)的數(shù)據(jù),key生成字符串類(lèi)型。

Redis的value的常用數(shù)據(jù)類(lèi)型

  • 字符串string

  • 哈希hash:類(lèi)似于java中的HashMap結(jié)構(gòu)

  • 列表list:按照插入順序排序,可以有重復(fù)元素,類(lèi)似java中的LinkedList

  • 集合set:無(wú)序集合,沒(méi)有重復(fù)元素,類(lèi)似java中的HashSet

  • 有序集合sorted set / zset:集合中每個(gè)元素關(guān)聯(lián)一個(gè)score,根據(jù)score升序排列,沒(méi)有重復(fù)元素。

Redis常用命令

通用命令

  1. keys pattern 查找所有符合給定模式pattern的key
  2. exists key 檢查給定的key是否存在(返回1表示鍵存在,返回0表示鍵不存在)
  3. type key 返回指定key所存儲(chǔ)的值的類(lèi)型
  4. del key 用于在key存在是刪除key

字符串操作命令

  1. set key value 設(shè)置指定key的值為value
  2. get key 獲取指定key的值
  3. setex key seconds value 設(shè)置指定key的值,并將key的過(guò)期時(shí)間設(shè)置為seconds秒
  4. setnx key value 只有在key不存在時(shí)設(shè)置key的值

哈希操作命令

  1. hset key field value 將哈希表key中的字段field設(shè)為value
  2. hget key field 獲取存儲(chǔ)在哈希表key中的field字段的值
  3. hdel key field 刪除存儲(chǔ)在哈希表中的指定字段
  4. hkeys key 獲取哈希表key中的所有字段
  5. hvals key 獲取哈希表key中所有值

列表操作命令

  1. lpush/rpush key value1 [value2] 將一個(gè)或多個(gè)值插入到列表的頭部/尾部
  2. lpop/rpop key 移除并獲取列表頭部/尾部元素
  3. lrange key start stop 獲取列表指定范圍內(nèi)的元素
  • start:區(qū)間起始位置(從 0 開(kāi)始計(jì)數(shù))。支持負(fù)數(shù),表示從列表末尾倒數(shù)(例如 -1 表示最后一個(gè)元素)。
  • stop:區(qū)間結(jié)束位置(包含在內(nèi))。同樣支持負(fù)數(shù)。
  • lrange mylist 0 -1 返回所有元素,等同于
  1. llen key 獲取列表的長(zhǎng)度
  2. lindex key index 用于獲取列表key中指定索引位置index的元素
  3. lrem key count value 用于從列表key中移除元素的命令。該命令根據(jù)指定的值和數(shù)量,從列表的頭部或尾部開(kāi)始移除匹配的元素。
  • count:移除元素的數(shù)量,具體含義如下:

    • count > 0:從列表頭部開(kāi)始,移除最多count個(gè)與value相等的元素。
    • count < 0:從列表尾部開(kāi)始,移除最多count的絕對(duì)值個(gè)與value相等的元素。
    • count = 0:移除列表中所有與value相等的元素。
  • value:要移除的元素值。

集合操作命令

  1. sadd key member1 [member2] 向集合key添加一個(gè)或多個(gè)成員
  2. smembers key 獲取集合key中的所有成員
  3. scard key 獲取集合key中的成員的數(shù)量
  4. sinter key1 [key2] 返回給定所有集合的交集
  5. sunion key1 [key2] 返回給定所有集合的并集
  6. srem key member1 [member2] 刪除集合key中的一個(gè)或多個(gè)成員

有序集合操作命令

  1. zadd key score 1 member1 [score2 member2] 向有序集合添加一個(gè)或多個(gè)成員
  2. zrange key start stop [withscores] 返回指定區(qū)間的成員,加上withscores顯示成員對(duì)應(yīng)的score
  3. zincrby key increment member 給有序集合key中指定成員的分?jǐn)?shù)加increment
  4. zrem key member1 [member2…] 移除有序集合中的一個(gè)或多個(gè)成員

緩存穿透問(wèn)題解決方案

什么是緩存穿透:指客戶(hù)端請(qǐng)求的數(shù)據(jù)在緩存redis中和數(shù)據(jù)庫(kù)中都不存在,導(dǎo)致大量請(qǐng)求到數(shù)據(jù)庫(kù),從而導(dǎo)致數(shù)據(jù)庫(kù)壓力驟增
解決方案

  1. 緩存空對(duì)象:對(duì)數(shù)據(jù)庫(kù)查詢(xún)結(jié)果為空的請(qǐng)求,返回空值,并緩存null到redis且設(shè)置ttl,即key:null
    需設(shè)置好ttl,避免長(zhǎng)期占用內(nèi)存

  2. 布隆過(guò)濾器在緩存之前加一層布隆過(guò)濾器,預(yù)先將數(shù)據(jù)庫(kù)中所有存在的 key 加載到布隆過(guò)濾器中。
    什么是布隆過(guò)濾器過(guò)濾器:

     布隆過(guò)濾器是一種空間效率極高的概率型數(shù)據(jù)結(jié)構(gòu),用于判斷一個(gè)元素是否存在于一個(gè)集合中。

    核心特點(diǎn):
    高效省空間:相比哈希表,它用位數(shù)組 + 多個(gè)哈希函數(shù)實(shí)現(xiàn),占用內(nèi)存極小,適合海量數(shù)據(jù)場(chǎng)景。
    概率性結(jié)果:
    不存在則一定不存在(100% 準(zhǔn)確);
    存在則可能存在(有一定誤判率,無(wú)法完全避免)。
    不支持刪除:元素加入后無(wú)法移除,否則會(huì)影響其他元素的判斷(部分變種支持刪除,但復(fù)雜度高)。
    工作原理:
    初始化一個(gè)長(zhǎng)度為 m 的位數(shù)組,所有位初始化為 0;
    選取 k 個(gè)獨(dú)立的哈希函數(shù);
    添加元素:將元素通過(guò) k 個(gè)哈希函數(shù)計(jì)算出 k 個(gè)索引,把位數(shù)組對(duì)應(yīng)索引的位設(shè)為 1;
    查詢(xún)?cè)兀簩⒃赝ㄟ^(guò) k 個(gè)哈希函數(shù)計(jì)算索引,若所有對(duì)應(yīng)位都是 1,則判斷 “可能存在”;只要有一個(gè)位是 0,則判斷 “一定不存在”。

攔截流程:

    客戶(hù)端發(fā)起請(qǐng)求,先經(jīng)過(guò)布隆過(guò)濾器判斷 key 是否存在;
	若布隆過(guò)濾器判斷 key 不存在 → 直接返回空結(jié)果,不訪問(wèn)緩存和數(shù)據(jù)庫(kù);
	若布隆過(guò)濾器判斷 key 可能存在 → 再走正常流程:查緩存 → 緩存未命中查數(shù)據(jù)庫(kù) → 數(shù)據(jù)庫(kù)查到則回寫(xiě)緩存。

使用布隆過(guò)濾器的注意事項(xiàng):

  • 誤判率處理:
    布隆過(guò)濾器的誤判會(huì)導(dǎo)致 “不存在的 key 被判斷為可能存在”,此時(shí)請(qǐng)求仍會(huì)打到數(shù)據(jù)庫(kù),但這種情況概率低,且可以通過(guò)調(diào)整位數(shù)組長(zhǎng)度 len 和哈希函數(shù)個(gè)數(shù) k 降低誤判率(len越大、k 適中,誤判率越低)。
  • 數(shù)據(jù)同步:
    當(dāng)數(shù)據(jù)庫(kù)中新增 / 刪除 key 時(shí),需要同步更新布隆過(guò)濾器(刪除操作需注意布隆過(guò)濾器不支持直接刪除的問(wèn)題,可通過(guò)定時(shí)重建布隆過(guò)濾器解決)。
  • 適用場(chǎng)景:
    適合海量數(shù)據(jù)、key 不常變動(dòng)、可以容忍低誤判率的場(chǎng)景(如:電商商品 ID、用戶(hù) ID 過(guò)濾)。

緩存擊穿問(wèn)題解決方案

什么是緩存擊穿:指高并發(fā)場(chǎng)景下,某個(gè)熱點(diǎn)數(shù)據(jù)的緩存突然失效(例如過(guò)期),導(dǎo)致大量請(qǐng)求直接穿透緩存層,直接請(qǐng)求到數(shù)據(jù)庫(kù),可能導(dǎo)致數(shù)據(jù)庫(kù)短時(shí)間內(nèi)承受巨大的壓力。
解決方案

  1. 互斥鎖:當(dāng)緩存失效時(shí),只允許一個(gè)線(xiàn)程去查詢(xún)數(shù)據(jù)庫(kù)并重建緩存,其他線(xiàn)程等待。可以使用分布式鎖(如Redis的setnx)實(shí)現(xiàn)互斥。

  • 優(yōu)點(diǎn):沒(méi)有額外的內(nèi)存消耗;保證了一致性;實(shí)現(xiàn)簡(jiǎn)單;
  • 缺點(diǎn):線(xiàn)程需要等待;可能死鎖
  1. 邏輯過(guò)期:為熱點(diǎn)數(shù)據(jù)設(shè)置邏輯過(guò)期時(shí)間,而非物理過(guò)期。緩存本身不主動(dòng)失效,但在緩存中存儲(chǔ)一個(gè)過(guò)期時(shí)間字段。當(dāng)發(fā)現(xiàn)數(shù)據(jù)過(guò)期時(shí),異步觸發(fā)緩存更新。

  • 優(yōu)點(diǎn):線(xiàn)程無(wú)需等待,性能較好
  • 缺點(diǎn):不能保證一致性;有額外的內(nèi)存消耗;實(shí)現(xiàn)較復(fù)雜

緩存雪崩問(wèn)題解決方案

什么是緩存雪崩:指緩存系統(tǒng)在某一時(shí)刻出現(xiàn)大規(guī)模失效或宕機(jī),導(dǎo)致大量請(qǐng)求直接涌向數(shù)據(jù)庫(kù),引發(fā)系統(tǒng)性能急劇下降甚至崩潰的現(xiàn)象。
解決方案

  1. 給不同的key的ttl設(shè)置隨機(jī)值
  2. 部署 Redis 集群或哨兵模式,確保單點(diǎn)故障時(shí)自動(dòng)切換
  3. 給業(yè)務(wù)添加多級(jí)緩存
  4. 給緩存業(yè)務(wù)添加降級(jí)限流策略

BitMap

什么是BitMap:Bitmap是Redis中一種特殊的數(shù)據(jù)結(jié)構(gòu),基于字符串類(lèi)型實(shí)現(xiàn),但每個(gè)位可以單獨(dú)操作。適用于需要高效存儲(chǔ)和操作大量布爾值的場(chǎng)景。最大上限是512M,轉(zhuǎn)換成bit是2^32個(gè)bit位

BitMap的常見(jiàn)用法

  1. setbit key offet value 向指定位置offet存入一個(gè)0或1
  2. getbit key offet 獲取指定位置offet的bit值
  3. bitcount key [start end] 統(tǒng)計(jì)指定范圍內(nèi)bit為1的數(shù)量
  4. bitpos key bit [start] [end] 查詢(xún)指定范圍內(nèi)第一個(gè)0或1出現(xiàn)的二進(jìn)制位的位置

總結(jié) 

到此這篇關(guān)于redis的常見(jiàn)用法和問(wèn)題之緩存擊穿、緩存穿透、緩存雪崩的文章就介紹到這了,更多相關(guān)redis緩存擊穿、緩存穿透、緩存雪崩內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • springboot項(xiàng)目redis緩存異常實(shí)戰(zhàn)案例詳解(提供解決方案)

    springboot項(xiàng)目redis緩存異常實(shí)戰(zhàn)案例詳解(提供解決方案)

    redis基本上是高并發(fā)場(chǎng)景上會(huì)用到的一個(gè)高性能的key-value數(shù)據(jù)庫(kù),屬于nosql類(lèi)型,一般用作于緩存,一般是結(jié)合數(shù)據(jù)庫(kù)一塊使用的,但是在使用的過(guò)程中可能會(huì)出現(xiàn)異常的問(wèn)題,這篇文章主要介紹了springboot項(xiàng)目redis緩存異常實(shí)戰(zhàn)案例詳解(提供解決方案),需要的朋友可以參考下
    2025-05-05
  • Redis中Stream詳解及應(yīng)用小結(jié)

    Redis中Stream詳解及應(yīng)用小結(jié)

    Redis Streams是Redis 5.0引入的新功能,提供了一種類(lèi)似于傳統(tǒng)消息隊(duì)列的機(jī)制,但具有更高的靈活性和可擴(kuò)展性,本文給大家介紹Redis中Stream詳解及應(yīng)用小結(jié),感興趣的朋友一起看看吧
    2025-07-07
  • Redis Lua腳本的使用教程

    Redis Lua腳本的使用教程

    在Redis的學(xué)習(xí)中,Lua腳本是一項(xiàng)強(qiáng)大的高級(jí)特性,它允許用戶(hù)在Redis中執(zhí)行復(fù)雜的操作,本文就來(lái)介紹一下Redis Lua,腳本的使用教程,感興趣的可以了解一下
    2024-03-03
  • Redis中的過(guò)期策略和淘汰策略使用詳解

    Redis中的過(guò)期策略和淘汰策略使用詳解

    這篇文章主要介紹了Redis中的過(guò)期策略和淘汰策略使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-06-06
  • 使用Redis控制表單重復(fù)提交和控制接口訪問(wèn)頻率方式

    使用Redis控制表單重復(fù)提交和控制接口訪問(wèn)頻率方式

    這篇文章主要介紹了使用Redis控制表單重復(fù)提交和控制接口訪問(wèn)頻率方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-06-06
  • redis分布式鎖的8大坑總結(jié)梳理

    redis分布式鎖的8大坑總結(jié)梳理

    這篇文章主要介紹了redis分布式鎖的8大坑總結(jié)梳理,使用redis的分布式鎖,我們首先想到的可能是setNx命令,文章圍繞setNx命令展開(kāi)詳細(xì)的內(nèi)容介紹,感興趣的小伙伴可以參考一下
    2022-07-07
  • Redis本地鎖和分布式鎖的區(qū)別小結(jié)

    Redis本地鎖和分布式鎖的區(qū)別小結(jié)

    Redis本地鎖和分布式鎖在設(shè)計(jì)目的、實(shí)現(xiàn)方式和應(yīng)用場(chǎng)景上都有顯著區(qū)別,下面就來(lái)介紹一下,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-04-04
  • Redis+Caffeine如何構(gòu)建高性能二級(jí)緩存

    Redis+Caffeine如何構(gòu)建高性能二級(jí)緩存

    這篇文章主要介紹了Redis+Caffeine如何構(gòu)建高性能二級(jí)緩存問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-05-05
  • redis 實(shí)現(xiàn)登陸次數(shù)限制的思路詳解

    redis 實(shí)現(xiàn)登陸次數(shù)限制的思路詳解

    這篇文章主要介紹了redis 實(shí)現(xiàn)登陸次數(shù)限制的思路詳解,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-08-08
  • Redis源碼與設(shè)計(jì)剖析之網(wǎng)絡(luò)連接庫(kù)

    Redis源碼與設(shè)計(jì)剖析之網(wǎng)絡(luò)連接庫(kù)

    這篇文章主要為大家介紹了Redis源碼與設(shè)計(jì)剖析之網(wǎng)絡(luò)連接庫(kù)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09

最新評(píng)論

汉中市| 若羌县| 壤塘县| 甘南县| 安陆市| 宝兴县| 徐水县| 宿迁市| 郧西县| 筠连县| 民丰县| 子长县| 宁蒗| 久治县| 曲麻莱县| 仲巴县| 汉阴县| 甘谷县| 出国| 临沧市| 大理市| 竹溪县| 西丰县| 博湖县| 灵山县| 清流县| 芮城县| 攀枝花市| 东阿县| 开化县| 勃利县| 花莲市| 德阳市| 郑州市| 托克托县| 乐至县| 新绛县| 东方市| 兰西县| 灵山县| 澳门|