Redis總結(jié)

1.redis支持哪些數(shù)據(jù)類型

?string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集合)

2.過期策略

(1)定期刪除:
Redis 默認(rèn)每個 100ms 檢查,有過期 Key 則刪除。需要說明的是,Redis 不是每個 100ms 將所有的 Key 檢查一次,而是隨機(jī)抽取進(jìn)行檢查,因為如果redis中有數(shù)量很大的key(例如幾十萬key),那么每隔100ms檢查一次,redis很可能就死掉了,因為數(shù)據(jù)太多,檢查太頻繁,cpu負(fù)載太高了。如果只采用定期刪除策略,會導(dǎo)致很多 Key 到時間沒有刪除。于是,惰性刪除派上用場。
(2)惰性刪除:
當(dāng)你在獲取某個 key 的時候,redis 會檢查這個 key是否設(shè)置了過期時間,如果設(shè)置了過期時間,檢查key是否過期,如果過期了此時就會刪除,返回空值。

3.淘汰機(jī)制

noeviction: 當(dāng)內(nèi)存不足以容納新寫入數(shù)據(jù)時,新寫入操作會報錯(使用較少)。
allkeys-lru:當(dāng)內(nèi)存不足以容納新寫入數(shù)據(jù)時,在鍵空間中,移除最近最少使用的 key(這個是最常用的)。
allkeys-random:當(dāng)內(nèi)存不足以容納新寫入數(shù)據(jù)時,在鍵空間中,隨機(jī)移除某個 key(使用較少)。
volatile-lru:當(dāng)內(nèi)存不足以容納新寫入數(shù)據(jù)時,在設(shè)置了過期時間的鍵空間中,移除最近最少使用的 key(使用較少)。
volatile-random:當(dāng)內(nèi)存不足以容納新寫入數(shù)據(jù)時,在設(shè)置了過期時間的鍵空間中,隨機(jī)移除某個 key(使用較少)。
volatile-ttl:當(dāng)內(nèi)存不足以容納新寫入數(shù)據(jù)時,在設(shè)置了過期時間的鍵空間中,有更早過期時間的 key 優(yōu)先移除(使用較少)。

4.什么是緩存雪崩

(1)對于“對緩存數(shù)據(jù)設(shè)置相同的過期時間,導(dǎo)致某段時間內(nèi)緩存失效,請求全部走數(shù)據(jù)庫。
(2)Redis掛掉了,請求全部走數(shù)據(jù)庫。

5.怎么解決緩存雪崩

對于“對緩存數(shù)據(jù)設(shè)置相同的過期時間,導(dǎo)致某段時間內(nèi)緩存失效,請求全部走數(shù)據(jù)庫?!边@種情況

  • 在緩存的時候給過期時間加上一個隨機(jī)值,這樣就會大幅度的減少緩存在同一時間過期。

對于“Redis掛掉了,請求全部走數(shù)據(jù)庫”這種情況,我們可以有以下的思路:

  • 事發(fā)前:實(shí)現(xiàn)Redis的高可用(主從架構(gòu)+Sentinel 或者Redis Cluster),盡量避免Redis掛掉這種情況發(fā)生。
  • 事發(fā)中:萬一Redis真的掛了,我們可以設(shè)置本地緩存(ehcache)+限流(hystrix),盡量避免我們的數(shù)據(jù)庫被干掉(起碼能保證我們的服務(wù)還是能正常工作的)
  • 事發(fā)后:redis持久化,重啟后自動從磁盤上加載數(shù)據(jù),快速恢復(fù)緩存數(shù)據(jù)

6.什么是緩存擊穿

緩存穿透是指查詢一個一定不存在的數(shù)據(jù)。由于緩存不命中,并且出于容錯考慮,如果從數(shù)據(jù)庫查不到數(shù)據(jù)則不寫入緩存,這將導(dǎo)致這個不存在的數(shù)據(jù)每次請求都要到數(shù)據(jù)庫去查詢,失去了緩存的意義。
比如:每次請求的ID都是負(fù)數(shù)。這會導(dǎo)致我的緩存就沒用了,請求全部都找數(shù)據(jù)庫去了,但數(shù)據(jù)庫也沒有這個值啊,所以每次都返回空出去。

7.如何解決緩存擊穿

  • 由于請求的參數(shù)是不合法的(每次都請求不存在的參數(shù)),于是我們可以使用布隆過濾器(BloomFilter)或者壓縮filter提前攔截,不合法就不讓這個請求到數(shù)據(jù)庫層!

-當(dāng)我們從數(shù)據(jù)庫找不到的時候,我們也將這個空對象設(shè)置到緩存里邊去。下次再請求的時候,就可以從緩存里邊獲取了。這種情況我們一般會將空對象設(shè)置一個較短的過期時間。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 考慮到絕大部分寫業(yè)務(wù)的程序員,在實(shí)際開發(fā)中使用 Redis 的時候,只會 Set Value 和 Get Valu...
    Boston199834閱讀 472評論 0 6
  • 原文章公眾號地址 問題: 1.為什么使用Redis 2.使用Redis有什么缺點(diǎn) 3.單線程的Redis為什么這么...
    wanxd閱讀 218評論 0 0
  • 本文圍繞以下幾點(diǎn)進(jìn)行闡述 1、為什么使用redis2、使用redis有什么缺點(diǎn)3、單線程的redis為什么這么快4...
    天堂鳥6閱讀 105評論 0 1
  • 一: Nosql Redis優(yōu)點(diǎn): Nosql(Not Only SQL) 非關(guān)系型數(shù)據(jù),數(shù)據(jù)儲存不需要固定的模式...
    劉小刀tina閱讀 616評論 0 0
  • 我是黑夜里大雨紛飛的人啊 1 “又到一年六月,有人笑有人哭,有人歡樂有人憂愁,有人驚喜有人失落,有的覺得收獲滿滿有...
    陌忘宇閱讀 8,831評論 28 54

友情鏈接更多精彩內(nèi)容