当时用缓存和DB之间配合时,如何更新缓存,更新DB数据,常用的是读数据,先读缓存,更新数据,先更新数据库,再写入缓存,除了这种策略还有哪些策略呢?
策略一
读操作
- 先查询缓存,如果存在则直接返回
- 如果缓存不存在,则查询数据库,查询到结果写入缓存,返回数据
- 如果数据库中也不存在数据,则设置一个短期过期的key写入缓存,防止请求大量此数据
写操作
- 先更新数据库
- 更新数据库成功后,将数据更新缓存,返回数据
缺点
当频繁修改操作时,如果在修改操作还未完成时,又发起了读取操作,则会造成数据不一致
策略二
读
- 先查询缓存,如果存在则直接返回
- 如果缓存不存在,则查询数据库,查询到结果写入缓存,返回数据
- 如果数据库中也不存在数据,则设置一个短期过期的key写入缓存,防止请求大量此数据
写
- 先更新数据库
- 删除缓存中对应的值
- 更新数据到缓存
缺点
一定程度上保证了数据一致性,但是在key被删除的情况下,如果此时有大量请求,会造成缓存穿透,大量请求到数据库
策略三
读
- 先查询缓存,如果存在则直接返回
- 如果缓存不存在,通过第三方组件查询数据库,查询到结果写入缓存,返回结果
写操作
- 先判断要写入的数据是否存在缓存中,存在则直接更新缓存数据,然后通过第三方组件写入数据库
- 如果缓存中不存在,则通过第三方组件写入数据库,并且写入缓存
- 第三方服务中判断是否需要重复写入数据库等操作
缺点
虽然数据都与缓存进行交互,但是使用第三方服务时可能会出现写入错误,也会造成数据不一致
总结
选用哪种策略,要按照自己实际情况来选.也需要根据实际业务,进行改造和扩展