缓存脏读无法避免,也没必要避免。如果想要保证数据的强一致性,应该阻塞所有的读(在满足多个db,分区容错性的前提下,必须牺牲一定的可用性),但就失去了使用redis的初衷

如果将更新缓存的方式,变为删除缓存,这样看似合理,本质上和更新一样,除此之外还需要考虑缓存击穿的问题

前脚读,后脚改其实无法避免,即使是单db也无法避免。用户在页面停留半小时点提交也是很正常的。类似这种的做好数据校验和幂等性,提示用户操作失败就可以了

所以只要不是特别严重(长时间不更新的)都是可以接受的

最重要的一定要设置缓存失效时间,兜底刷新

结论:缓存脏读无法避免,数据要求强一致性的本身就不应该放入缓存中。更新db刷新缓存,保证毫秒级别的更新即可

使用spring线程池可以归纳为线程隔离的一种方式。这种做法使Tomcat线程池和spring线程池不会互相拖累。spring线程池的作用是为了保证Tomcat线程池不枯竭