微信登录

Redis要避免的问题 - 双写不一致

Redis要避免的问题 - 双写不一致

问题

缓存和数据库会有双写
会有一个时间差不一样

解决

Cahce Aside Pattern

  1. 第一种情况:第一次查语句id=1 -› redis(无) -› mysql(有) -耗时600ms
  2. ‹---返回-------------------- redis(有) -------------
  3. 第一种情况:第n次查语句id=1 -› redis(有) ---耗时2ms
  4. ‹---返回--------------------------------
  5. 更新 -› 先更新mysql数据库数据 -› 后删除redis缓存数据 ---------------运用了lazy计算思想,就是用才算出来

只可以:先更新mysql数据库数据 -› 后删除redis缓存数据
不可以:先删除redis缓存数据 -› 后更新mysql数据库数据,否则:

  1. 更新 -› 先更新mysql数据库数据 -› 后删除redis缓存数据(失败了)
  2. 数据会出现不一致
  3. 更新 -› 先删除redis缓存数据 -› 后更新mysql数据库数据(失败了)
  4. 数据不会出现不一致
  5. 更新
  6. -› 1、先删除redis缓存数据
  7. -----------------------› !突然有一个请求过来!(1、查redis查不到)
  8. -----------------------› !突然有一个请求过来!(2、查mysql旧数据)
  9. -----------------------› !突然有一个请求过来!(3、写redis旧)
  10. -› 2、后更新mysql数据库数据
  11. 炸了,后面的查都查旧数据
Redis要避免的问题 - 双写不一致