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