Redis与DB之间的缓存策略

当时用缓存和DB之间配合时,如何更新缓存,更新DB数据,常用的是读数据,先读缓存,更新数据,先更新数据库,再写入缓存,除了这种策略还有哪些策略呢?

策略一

读操作

  1. 先查询缓存,如果存在则直接返回
  2. 如果缓存不存在,则查询数据库,查询到结果写入缓存,返回数据
  3. 如果数据库中也不存在数据,则设置一个短期过期的key写入缓存,防止请求大量此数据

写操作

  1. 先更新数据库
  2. 更新数据库成功后,将数据更新缓存,返回数据

缺点

当频繁修改操作时,如果在修改操作还未完成时,又发起了读取操作,则会造成数据不一致

策略二

  1. 先查询缓存,如果存在则直接返回
  2. 如果缓存不存在,则查询数据库,查询到结果写入缓存,返回数据
  3. 如果数据库中也不存在数据,则设置一个短期过期的key写入缓存,防止请求大量此数据

  1. 先更新数据库
  2. 删除缓存中对应的值
  3. 更新数据到缓存

缺点

一定程度上保证了数据一致性,但是在key被删除的情况下,如果此时有大量请求,会造成缓存穿透,大量请求到数据库

策略三

  1. 先查询缓存,如果存在则直接返回
  2. 如果缓存不存在,通过第三方组件查询数据库,查询到结果写入缓存,返回结果

写操作

  1. 先判断要写入的数据是否存在缓存中,存在则直接更新缓存数据,然后通过第三方组件写入数据库
  2. 如果缓存中不存在,则通过第三方组件写入数据库,并且写入缓存
  3. 第三方服务中判断是否需要重复写入数据库等操作

缺点

虽然数据都与缓存进行交互,但是使用第三方服务时可能会出现写入错误,也会造成数据不一致

总结

选用哪种策略,要按照自己实际情况来选.也需要根据实际业务,进行改造和扩展