redis缓存设计要点随谈
在高并發系統中,緩存是必不可少的一部分。沒有緩存對系統的加速和阻擋大量的請求直接落到系統的數據庫,系統是很難撐住高并發的沖擊。所以緩存設計是系統很關鍵的一環。
1、緩存更新
緩存的數據一般都是有有效期的,過了一段時間之后就會失效,再次訪問時需要重新加載。緩存的失效是為了保證與數據源真實的數據保證一致性和緩存空間的有效利用性。
緩存更新一般分為3種
1、空間有限,當達到最大值時? 根據系統的設置規則直接過期的,
比如最少使用、隨機等一些過期策略。
2、緩存設置了過期時間的。
3、數據庫更新了,主動更新緩存數據的。
一般的話?低一致性要求的符合1和2即可。
高一致性的符合2和3的方式。
2、緩存穿透
緩存穿透指的是查詢一個不存在的數據,進而導致每次都落到數據庫里面去查詢。
1、解決辦法主要是緩存一個空數據,并且設置一個較短的有效期,避免每次都命中數據庫。
2、針對查詢的鍵key 規則進行校驗,比如 id_{N}
N數據? ?可以對N的格式和范圍進行校驗,不符合的直接返回,不往下走。
這種一般是在緩存key不存在且數據庫不存在的情況下發生。
3、緩存雪崩
緩存雪蹦指的是同一時間大量緩存過期或者緩存不可用,導致大量的請求進入數據層。
針對這種情況一般是?
1 設置緩存的過期時間,一般需要再加些隨機數,避免過期時間大家都一樣。
2、保證緩存服務的高可用。
3、緩存擊穿:
指的是單個key在緩存中查不到,去數據庫查詢,如果數據庫數據量大并且是高并發的情況下那么就可能會造成數據庫壓力過大而崩潰。
解決辦法
1 使用鎖機制確保緩存生成過程是單線程在操作,其他線程需等待、重試。
2、利用redis add 特性 直接加鎖,其他請求進來,判斷是進行中的直接return.
總結
以上是生活随笔為你收集整理的redis缓存设计要点随谈的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 虎年云原生落地技术趋势
- 下一篇: 违反Apache 2.0许可证再分发被指