缓存的作用
在大型软件系统的构建中,分层是一种很好的设计思路,我们通过抽象思维,将同一个抽象层次的概念放在同一层次交互,上层以来下层的接口,下层对上层隐藏复杂的实现细节。操作系统、rpc框架、大型应用系统都有类似的分层的概念在里面。
操作系统中的缓存应用
不同的存储介质的存储容量和存取速度是各不相同的,在操作系统的存储架构中,从CPU寄存器到外部磁盘存储,存取速度逐步降低,但是存储容量逐步上升。在这个体系中,高速缓存是内存在CPU侧的缓存,磁盘缓存是磁盘在内存侧的缓存。
缓存的设计模式
一般来说,如果没有必要,我们是不会引入缓存的,引入缓存之后,我们就需要考虑缓存的更新模式,以及缓存的数据一致性问题。更新缓存的的设计有四种:Cache aside, Read through, Write through, Write behind caching,我们一一看下。
Cache Aside(旁路缓存)
如果缓存存储器没有提供原生的写直通或读直通能力,并且我们也不清楚需要将哪些数据存入缓存,希望能够根据应用的需要(时间或空间局部性)来缓存数据,则比较适合用这种模式。整个业务逻辑没有缓存也可以完成,无非就是效率低一些,旁路缓存的作用就是用来提效。
-
读取:如果缓存命中则直接返回,如果没有则从数据库中读取,并且将读取的数据写回缓存。
-
更新:先更新数据库,再删除缓存。
-
“先更新缓存,再更新数据库”也是有问题的,在并发写情况下可能会导致缓存中存在脏数据,缓存和DB存在不一致的数据
Read/Write Through(读/写直通)
在上面的 Cache Aside 更新模式中,应用代码需要维护两个数据存储,一个是缓存(Cache),一个是数据库(Repository)。而在Read/Write Through 更新模式中,应用程序只需要维护缓存,数据库的维护工作由缓存代理了。
参考资料
-
-
https://mp.weixin.qq.com/s/4W7vmICGx6a_WX701zxgPQ
知识卡片
文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树使用JDBC操作数据库数据库操作91326 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!