1:操作缓存时,先写数据库,再写缓存。

2:对于缓存的并发性问题

由于卡顿等原因,导致了缓存2走到了缓存1的前面,这样数据库的数据得到的和缓存中查询的不一致
脏数据的问题,在数据稳定之后,缓存过期后,重新查询数据库便可以达到正常的数据,达到数据的一致性。
失效模式:
先进行写数据库,再删除缓存

对于缓存双写模式还是失效模式,都会导致缓存不一致的问题
1:缓存数据加上过期时间,隔一段时间触发进行主动更新即可。
2:缓存数据+过期时间可以解决大部分业务对于缓存的要求。
3:通过加锁保证并发读写,写的时候按顺序排好队。读读无所谓。适用于读写锁(业务不关心脏数据,允许临时出现脏数据的问题可以忽略)
总结
1:放入缓存中的数据不应该是实时性、一致性要求超高的。所以缓存数据加上相应的过期时间、保证每天拿到最新的数据即可。
2:不应该过度设计,增加系统的复杂性。
3:遇到实时性、一致性要求很高的数据,应该直接查询数据库。 |