缓存能够提高读取速度,但操作不好也会带来一些弊端,在业务中使用缓存时操作顺序如何 ,如何确保业务读到正确的数据呢。在这篇文章中主要讲解一下先是操作数据库还是先操作缓存。
读不会改变数据,一般都是先读缓存在读数据库
对于写请求有两种情况。
第一种:先操作缓存,在操作数据库
对于写请求(以数据库操作成功为准 来判断写是否成功),
(1) 先操作缓存(delete 或者set),
(2)操作数据库,在操作数据库阶段,
若第一步成功,第二步失败。这里又分两种情况:
若在(1)中使用set 则会导致缓存中数据 与数据库中不一致。
若在(1)中使用delete则只会导致缓存没有该数据,数据并不会出现不一致,只是下次读取该数据时会重新在缓存中存取
若第一步失败,可以直接返回50X(服务器端错误),则没有后续操作,即数据也会一致
第二种 :
(1)先操作数据库,
(2)接着操作缓存(set或者delete)
若第一步失败,则直接返回50X(服务器端错误), 没有后续操作,则数据一致。
若第一步成功,第二步失败,数据库中数据已经更新,第二步失败后不管操作缓存是用set还是delete操作,缓存操作失败,导致缓存数据与数据库中数据不一致,从而造成业务读取脏数据
综上所诉,在业务进行写操作时,因该先操作缓存(选用delete方法,虽然会造成缓存miss但不影响数据一致性)
在操作数据库。