redis特性
- 速度快
- 鍵值對的數(shù)據(jù)結(jié)構(gòu)服務器
- 豐富的功能
- 簡單穩(wěn)定
- 持久化
- 主從復制
- 高可用和分布式
- 客戶端語言多
Redis使用場景
1.配合關系型數(shù)據(jù)庫做高速緩存
2.社區(qū)中的評論宅荤、點贊题涨、恢復等等踏拜。(使用傳統(tǒng)數(shù)據(jù)庫的select語句很耗費性能)
3.網(wǎng)頁的排行榜凹嘲、計數(shù)器
4.webMagic爬蟲框架,使用RedisSchedule作去重捧书,支持分布式
Redis緩存雪崩
- 緩存雪崩,是指在某一個時間段,緩存集中過期失效陆盘。
產(chǎn)生雪崩的原因之一,比如在寫本文的時候败明,馬上就要到雙十二零點隘马,很快就會迎來一波搶購,這波商品時間比較集中的放入了緩存妻顶,假設緩存一個小時酸员。那么到了凌晨一點鐘的時候,這批商品的緩存就都過期了讳嘱。而對這批商品的訪問查詢幔嗦,都落到了數(shù)據(jù)庫上,對于數(shù)據(jù)庫而言沥潭,就會產(chǎn)生周期性的壓力波峰邀泉。 - 解決思路:
- 大多數(shù)考慮用加鎖或者隊列的方式保證來保證不會有大量的線程對數(shù)據(jù)庫一次性進行讀寫,避免緩存失效時對數(shù)據(jù)庫造成太大的壓力,雖然能夠在一定的程度上緩解了數(shù)據(jù)庫的壓力但是與此同時又降低了系統(tǒng)的吞吐量汇恤。
- 分析用戶的行為庞钢,盡量讓緩存失效的時間均勻分布。
- 如果是因為某臺緩存服務器宕機因谎,可以考慮做主備基括,比如:redis主備,但是雙緩存涉及到更新事務的問題财岔,update可能讀到臟數(shù)據(jù)风皿,需要好好解決。
Redis緩存穿透
第一次看到這個名字使鹅,會覺得是一個很高深的名詞揪阶。但是和其他許多概念一樣,它只是描述了一個很容易理解的現(xiàn)象:請求了不存在的數(shù)據(jù)患朱。造成大量的請求沒有命中緩存場景之一:數(shù)據(jù)庫使用了id為正整數(shù)作為鍵鲁僚,但是黑客使用負整數(shù)向服務器發(fā)起請求,這時所有的請求都沒有在緩存中命中裁厅,從而導致大量請求數(shù)據(jù)庫冰沙,如果超過了數(shù)據(jù)庫的承載能力,會導致數(shù)據(jù)庫服務器宏機执虹。
- 解決緩存穿透的方案主要有兩種:
當查詢不存在時拓挥,也將結(jié)果保存在緩存中。但是這可能會存在一種問題:大量沒有查詢結(jié)果的請求保存在緩存中袋励,這時我們就可以將這些請求的key設置得更短一些侥啤。
提前過濾掉不合法的請求,Redis實現(xiàn)了布隆過濾器茬故,我們可以使用它來達到這個目的盖灸。布隆過濾器很好理解,可以參考布隆過濾器(Bloom Filter)的原理和實現(xiàn)磺芭。