缓存有三种读写模式
Cache Aside Pattern(旁路缓存),
是最经典的缓存+数据库读写模式。 读的时候,先读缓存,缓存没有的话,就读数据库,然后取出数据后放入缓存,同时返回响应。
更新的时候,先更新数据库,然后再删除缓存。
高并发脏读的三种情况
1、先更新数据库,再更新缓存
更新缓存比较不好,缓存的值是一个结构如hash、list的时候,更新数据需要遍历。还会出现,缓存更新成功,数据库commit失败,数据不一致。
2、先删除缓存,再更新数据库
3、先更新数据库,再删除缓存(推荐)
2,3 都会出现缓存为空,数据库commit还未完成,其他线程进来读取旧数据放到缓存中,数据不一致。但是第三种可以用延时双删解决。