8000
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