怎么使用缓存、缓存穿透、热点数据处理、缓存雪崩解决方案 - 公开课笔记
主要內(nèi)容
- 怎么使用緩存
- 什么是緩存穿透、解決方案?
- 對(duì)于熱點(diǎn)數(shù)據(jù)的訪問(wèn)怎么處理?
- 怎么規(guī)避雪崩與雪崩解決方案
如何使用緩存?
緩存用來(lái)提高性能、保護(hù)數(shù)據(jù)庫(kù)
緩存穿透?
緩存穿透,指指查詢數(shù)據(jù)庫(kù)和緩存都沒(méi)有的數(shù)據(jù)
解決方案?
1、緩存空對(duì)象:代碼簡(jiǎn)單、效果不好
2、布隆過(guò)濾器:代碼復(fù)雜、效果很好
緩存空對(duì)象
缺點(diǎn):
1、同一個(gè)key不會(huì)多次查詢數(shù)據(jù)庫(kù),但是如果換一個(gè)key,還是會(huì)去查詢數(shù)據(jù)庫(kù)
2、redis中會(huì)有大量的空數(shù)據(jù),占用redis內(nèi)存
布隆過(guò)濾器
布隆過(guò)濾器應(yīng)用
輸出:
誤判的數(shù)量:10
布隆過(guò)濾器可以看做是一個(gè)特殊的集合對(duì)象,只有兩個(gè)方法:
1、put()方法
2、mightContain()方法
不能delete,不能get
布隆過(guò)濾器存在一定的fpp誤判概率,可以自己定義容錯(cuò)率(必須大于0.0),容錯(cuò)率越低,內(nèi)存消耗越大。在上圖中可以看到,我們?cè)O(shè)定誤判的概率為0.001,size表示預(yù)計(jì)插入到集合中的數(shù)據(jù)量
布隆過(guò)濾器原理
底層是一個(gè)bit數(shù)組
初始化value全部為0
添加“太白”之后,下面3個(gè)黃色位置變?yōu)?
原理:(以3個(gè)哈希函數(shù)為例)
添加“太白”之后,用3個(gè)不同的哈希函數(shù)對(duì)“太白”進(jìn)行哈希。哈希得到數(shù)字之后,再對(duì)數(shù)組長(zhǎng)度取余數(shù),得到3個(gè)對(duì)應(yīng)的數(shù)組下標(biāo)。
因?yàn)榈讓又挥幸粋€(gè)bit數(shù)組,并不去保存數(shù)據(jù),所以不能get數(shù)據(jù)。
因?yàn)橥粋€(gè)格子有可能會(huì)被多個(gè)數(shù)據(jù)占用,所以不能delete數(shù)據(jù)。
誤判示例:產(chǎn)生哈希沖突(下圖)
正確判斷示例:
影響容錯(cuò)率的因素:
數(shù)組長(zhǎng)度、Hash函數(shù)的個(gè)數(shù),兩者需要配合使用才能達(dá)到更好的效果,并不是越大越好
guava原理
用戶只需要定義預(yù)計(jì)插入量、容錯(cuò)率
例如,當(dāng)我們?cè)O(shè)置預(yù)計(jì)插入量=1000000,容錯(cuò)率fpp=0.1時(shí),,使用算法:
計(jì)算出
redis
redis底層是使用位數(shù)組存儲(chǔ)key的
執(zhí)行下面操作后,redis會(huì)自動(dòng)擴(kuò)容
自己手寫(xiě)分布式的布隆過(guò)濾器
對(duì)于熱點(diǎn)數(shù)據(jù)的訪問(wèn)
緩存擊穿(99個(gè)人同時(shí)訪問(wèn)一個(gè)緩存沒(méi)有,但數(shù)據(jù)庫(kù)有的數(shù)據(jù))
數(shù)據(jù)庫(kù)有數(shù)據(jù),緩存沒(méi)有的情況:
1、這條數(shù)據(jù)沒(méi)有人訪問(wèn)過(guò)
2、緩存剛好失效
解決方式:加鎖
緩存血崩
1、redis掛了
2、大部分緩存同時(shí)失效
規(guī)避方式:
redis搭建高可用集群(cluster)錯(cuò)開(kāi)數(shù)據(jù)過(guò)期時(shí)間
如果已經(jīng)出現(xiàn)了雪崩:降級(jí)、熔斷
解決數(shù)據(jù)一致性問(wèn)題
總結(jié)
以上是生活随笔為你收集整理的怎么使用缓存、缓存穿透、热点数据处理、缓存雪崩解决方案 - 公开课笔记的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 服务器安全:浏览器同源策略与跨域请求、X
- 下一篇: 淘宝网秒杀需求分析与实现 - 公开课笔记