We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
There was an error while loading. Please reload this page.
1 parent f0cccea commit fe5ee74Copy full SHA for fe5ee74
docs/high-concurrency/redis-consistence.md
@@ -37,7 +37,21 @@
37
38

39
40
-解决思路:先删除缓存,再更新数据库。如果数据库更新失败了,那么数据库中是旧数据,缓存中是空的,那么数据不会不一致。因为读的时候缓存没有,所以去读了数据库中的旧数据,然后更新到缓存中。
+解决思路 1:先删除缓存,再更新数据库。如果数据库更新失败了,那么数据库中是旧数据,缓存中是空的,那么数据不会不一致。因为读的时候缓存没有,所以去读了数据库中的旧数据,然后更新到缓存中。
41
+
42
+解决思路 2:延时双删。依旧是先更新数据库,再删除缓存,唯一不同的是,我们把这个删除的动作,在不久之后再执行一次,比如 5s 之后。
43
44
+```java
45
+public void set(key, value) {
46
+ putToDb(key, value);
47
+ deleteFromRedis(key);
48
49
+ // ... a few seconds later
50
51
+}
52
+```
53
54
+删除的动作,可以有多种选择,比如:1. 使用 `DelayQueue`,会随着 JVM 进程的死亡,丢失更新的风险;2. 放在 `MQ`,但编码复杂度为增加。总之,我们需要综合各种因素去做设计,选择一个最合理的解决方案。
55
56
### 比较复杂的数据不一致问题分析
57
0 commit comments