后端緩存與 redis 應(yīng)用
在實(shí)際業(yè)務(wù)場(chǎng)景中,涉及到數(shù)據(jù)緩存時(shí),Redis 作為一種高性能緩存工具,常被應(yīng)用于提升系統(tǒng)性能和降低數(shù)據(jù)庫(kù)負(fù)載。
業(yè)務(wù)場(chǎng)景分析
我們以一個(gè)簡(jiǎn)單博客系統(tǒng)為例。系統(tǒng)需要記錄文章的點(diǎn)贊總數(shù)和用戶是否點(diǎn)過(guò)贊。在采用 mysql 時(shí),實(shí)現(xiàn)邏輯較為簡(jiǎn)單。然而,當(dāng)考慮采用 Redis 時(shí),一些設(shè)計(jì)問(wèn)題值得關(guān)注。
錯(cuò)誤理解:Redis 同步 MySQL
題主存在一個(gè)錯(cuò)誤理解:認(rèn)為 Redis 數(shù)據(jù)需同步到 MySQL 中。這個(gè)理解是不正確的。Redis 主要充當(dāng)緩存的角色,與 MySQL 的關(guān)系為緩存分離(Cache Aside)。
正確應(yīng)用:Cache Aside
Cache Aside 模式下,數(shù)據(jù)操作遵循以下流程:
-
讀操作:
- 先從 Redis 中獲取數(shù)據(jù)。
- 如果有,直接返回。
- 如果沒(méi)有,則從 MySQL 中查詢并寫(xiě)入 Redis。
-
寫(xiě)操作:
- 先將數(shù)據(jù)更新到 MySQL 中。
- 然后刪除 Redis 中對(duì)應(yīng)的數(shù)據(jù)。
具體場(chǎng)景應(yīng)用
在博客系統(tǒng)場(chǎng)景中,當(dāng)用戶刷新頁(yè)面查詢某篇文章點(diǎn)贊數(shù)時(shí):
- 后端先從 Redis 中查詢點(diǎn)贊數(shù)。
- 如果 Redis 中有數(shù)據(jù),直接返回。
- 如果 Redis 中沒(méi)有數(shù)據(jù),則從 MySQL 中查詢并寫(xiě)入 Redis 中,返回結(jié)果。
而當(dāng)用戶點(diǎn)贊或取消點(diǎn)贊時(shí):
- 后端先將點(diǎn)贊信息更新到 MySQL 中。
- 然后刪除 Redis 中該文章對(duì)應(yīng)的點(diǎn)贊數(shù)緩存。
這樣設(shè)計(jì),既能利用 Redis 的高性能緩存特性提升系統(tǒng)性能,同時(shí)又能保證數(shù)據(jù)一致性。