Skip to content

Commit c0534c9

Browse files
committed
Update Redis.md
1 parent 2d08c89 commit c0534c9

File tree

1 file changed

+4
-0
lines changed

1 file changed

+4
-0
lines changed

docs/database/Redis/Redis.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -296,12 +296,16 @@ Redis 通过 MULTI、EXEC、WATCH 等命令来实现事务(transaction)功能。
296296

297297
### 如何保证缓存与数据库双写时的数据一致性?
298298

299+
> 一般情况下我们都是这样使用缓存的:先读缓存,缓存没有的话,就读数据库,然后取出数据后放入缓存,同时返回响应。这种方式很明显会存在缓存和数据库的数据不一致的情况。
300+
299301
你只要用缓存,就可能会涉及到缓存与数据库双存储双写,你只要是双写,就一定会有数据一致性的问题,那么你如何解决一致性问题?
300302

301303
一般来说,就是如果你的系统不是严格要求缓存+数据库必须一致性的话,缓存可以稍微的跟数据库偶尔有不一致的情况,最好不要做这个方案,读请求和写请求串行化,串到一个内存队列里去,这样就可以保证一定不会出现不一致的情况
302304

303305
串行化之后,就会导致系统的吞吐量会大幅度的降低,用比正常情况下多几倍的机器去支撑线上的一个请求。
304306

307+
更多内容可以查看:https://github.com/doocs/advanced-java/blob/master/docs/high-concurrency/redis-consistence.md
308+
305309
**参考:** Java工程师面试突击第1季(可能是史上最好的Java面试突击课程)-中华石杉老师!公众号后台回复关键字“1”即可获取该视频内容。
306310

307311
## 公众号

0 commit comments

Comments
 (0)