如果以Redis为主,DB只是作为数据的一种备份或持久化方案,可以不用太过在意数据一致性问题,这时所有的应用服务器对数据的操作都在Redis中,数据Redis层数据是一致的,数据操作不会穿透到DB层。
如果Redis作为缓存,就需要考虑数据一致性问题,这时是以DB为主,Redis等只是对数据的缓存,作为缓存必定有失效的时候,前面的应用层很有可能穿透到DB层,对于这种场景有两个要考虑一致性的地方:如果DB层数据修改的,如何同步到Redis层;如果Redis层修改了,如何同步到DB层。
最容易想到的就是对每一个可能涉及到修改的缓存元素都设置过期时间,比如5分钟,这样当一台服务器穿透到DB层修改了数据,那么另一台服务器最久只需5分钟就可以获得最新数据。也可以通过在DB层利用DB函数的方式,定时更新Redis数据。但是也可以看到这些方法不能用于金融等对数据一致性要求严格的地方。