概述
前一篇中,我们介绍了缓存面临的主要问题
今天我们来介绍一下缓存架构的常用实现方式
常见的缓存架构主要有两种:
-
旁路型缓存
-
穿透型缓存
穿透型缓存
穿透型缓存的设计原则是将缓存与后端数据库的交互细节对应用层服务隐藏
应用层服务所有的读写请求均请求缓存,读请求 miss 后,缓存向后端数据服务器请求数据,先更新缓存后返回
而写请求也是同样的,先写入缓存服务器,后同步给后端服务器
数据一致性问题
这样的架构存在一个问题,那就是原子性问题,如果不能保证读写的原子性,就无法保证数据的一致性
在读写并发的环境中,读请求发生 miss,此时缓存服务器向后端服务器请求数据并写入缓存,但在写入缓存前,如果发生了一个完整的写请求,那么就会出现这个写请求写入的新缓存被读请求获取的旧数据覆盖的问题
实现复杂度问题
另一个让这套缓存架构没能成为常用架构的原因是实现的复杂度
开发人员必须将代码分散于业务层与存储层,这给代码的开发和维护带来很高的复杂度</