企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
## 缓存数据一致性 ### 双写模式 修改完数据库就把缓存中的也修改 A线程改完数据库,在要修改缓存时,B线程也修改了数据库,同时B线程先把缓存修改了,这导致A线程再修改缓存,使得缓存的数据库是旧数据了,导致脏数据了。需要等缓存过期,或者数据又被修改了。 解决脏数据问题 修改数据库和修改缓存放到同一个锁里,这样只有修改完缓存,锁才会释放,下一个线程才能修改这条数据。 因为加锁,降低了性能。 ### 失效模式 修改完数据库就把缓存删除 A线程改完数据库,并删除完缓存,B线程也在修改数据库时,C线程来读取缓存,这时候缓存因为删除了,会直接读取数据库并往缓存中更新(拿到的是A的值),如果C更新缓存是在B删除缓存之后,将导致C把A的值更新到缓存中。 解决脏数据问题 修改数据库和修改缓存放到同一个锁里,这样只有修改完缓存,锁才会释放,下一个线程才能修改这条数据。 因为加锁,降低了性能。 我们能放入缓存的数据本就不应该是实时性、一致性要求超高的,所以缓存数据的时候加上保证每天拿到当前最新数据即可。,我们不应该过度设计,增加系统的复杂性遇到实时性、一致性要求高的数据,就应该查数据库,即使慢点.