一:给缓存设置过期时间,是保证最终一致性的终极解决方案。
这种方案下,我们可以对存入缓存的数据设置过期时间,所有的写操作以数据库为准,对缓存操作只是尽最大努力即可。也就是说如果数据库写成功,缓存更新失败,那么只要到达过期时间,则后面的读请求自然会从数据库中读取新值然后回填缓存。因此,接下来讨论的思路不依赖于给缓存设置过期时间这个方案。
二:采用延时双删策略
public void use(String key,Object data){
redis.delKey(key);
db.updateData(data);
Thread.sleep(800);
redis.delKey(key);
}