1、
缓存和数据库更新策略对比
1. 先删除缓存、再更新数据库
在高并发下表现不如意,在原子性被破坏时表现优异
2. 先更新数据库,再删除缓存(Cache Aside Pattern设计模式))
在高并发下表现优异,在原子性被破坏时表现不如意
方案1
[主动]后台点击更新缓存按钮,从DB查找最新数据集合,删除原缓存数据,存储新数据到缓存;
问题
更新过程中删除掉缓存后刚好有业务在查询,那么这个时候返回的数据会是空,会影响用户体验
方案2
[被动]前台获取数据时发现没有缓存数据就会去数据库同步数据到缓存
问题
当并发请求获取缓存数据不存在的时候,就会产生并发的查询数据的操作。
方案3
[主动]后台点击更新缓存按钮,从DB查找最新数据集合,这里不删除缓存,通过遍历数据覆盖和删除掉无效的数据
问题
逻辑相对麻烦,而且更新机制无法通用;
方案4
[主动][预加载]前台获取缓存的时候需要先得到缓存数据对应的Redis Key(简称:[ShowingKey]),然后根据[ShowingKey]去读取缓存数据(简称:[缓存];
[ShowingKey](可以是最近一次更新缓存的时间戳或者根据自己规则自定义)
[缓存](需要缓存的数据,如:DB数据等)
2、