更新策略:
1.Cache Aside
- get:从cache取数据,没有得到,则从数据库中取数据,成功后,放到缓存中(热点数据做同步处理)
- update: 更新数据库,成功后,删除缓存
2.同步+异步双保险更新
只有同步更新没有异步更新时,多线程进行更新会存在问题,db先A后B,缓存先B后A;
3.Read/Write Through
- Read Through
Read Through 套路就是在查询操作中更新缓存,也就是说,当缓存失效的时候(过期或LRU换出),Cache Aside是由调用方负责把数据加载入缓存,而Read Through则用缓存服务自己来加载,从而对应用方是透明的。
- Write Through
Write Through 套路和Read Through相仿,不过是在更新数据时发生。当有数据更新的时候,如果没有命中缓存,直接更新数据库,然后返回。如果命中了缓存,则更新缓存,然后再由Cache自己更新数据库(这是一个同步操作)
其中的Memory可以理解为就是我们例子里的数据库。
4.Write Behind Caching
Write Behind Caching 更新模式就是在更新数据的时候,只更新缓存,不更新数据库,而我们的缓存会异步地批量更新数据库。这个设计的好处就是直接操作内存速度快。因为异步,Write Behind Caching 更新模式还可以合并对同一个数据的多次操作到数据库,所以性能的提高是相当可观的。
但其带来的问题是,数据不是强一致性的,而且可能会丢失。另外,Write Behind Caching 更新模式实现逻辑比较复杂,因为它需要确认有哪些数据是被更新了的,哪些数据需要刷到持久层上(dirty)。只有在缓存需要失效的时候,才会把它真正持久起来。