From c0534c90f820176ba389377cfc5064770f744647 Mon Sep 17 00:00:00 2001 From: Kou Shuang Date: Tue, 12 Nov 2019 11:05:26 +0800 Subject: [PATCH] Update Redis.md --- docs/database/Redis/Redis.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/database/Redis/Redis.md b/docs/database/Redis/Redis.md index 33790b26..53f8abca 100644 --- a/docs/database/Redis/Redis.md +++ b/docs/database/Redis/Redis.md @@ -296,12 +296,16 @@ Redis 通过 MULTI、EXEC、WATCH 等命令来实现事务(transaction)功能。 ### 如何保证缓存与数据库双写时的数据一致性? +> 一般情况下我们都是这样使用缓存的:先读缓存,缓存没有的话,就读数据库,然后取出数据后放入缓存,同时返回响应。这种方式很明显会存在缓存和数据库的数据不一致的情况。 + 你只要用缓存,就可能会涉及到缓存与数据库双存储双写,你只要是双写,就一定会有数据一致性的问题,那么你如何解决一致性问题? 一般来说,就是如果你的系统不是严格要求缓存+数据库必须一致性的话,缓存可以稍微的跟数据库偶尔有不一致的情况,最好不要做这个方案,读请求和写请求串行化,串到一个内存队列里去,这样就可以保证一定不会出现不一致的情况 串行化之后,就会导致系统的吞吐量会大幅度的降低,用比正常情况下多几倍的机器去支撑线上的一个请求。 +更多内容可以查看:https://github.com/doocs/advanced-java/blob/master/docs/high-concurrency/redis-consistence.md + **参考:** Java工程师面试突击第1季(可能是史上最好的Java面试突击课程)-中华石杉老师!公众号后台回复关键字“1”即可获取该视频内容。 ## 公众号 -- GitLab