加速CPU数据交换的存储器。
数据高速交换的存储介质,加速数据访问。
任何事情都有两面性,缓存也不例外。
业务系统读写缓存主要有 3 种模式
常见、简单的一种模式
miss后读db+回写
更新db,删除cache。
Lazy计算,以DB数据为准
如果缓存加载过程复杂,懒加载会影响用户,可以增加一个watch DB 日志的服务,更新DB后,异步创建缓存。但是这期间的查询操作,还是要自行创建缓存。异步创建缓存还可以进行预读,缓存附近的内容,空间局限性原理。也可以通过MQ来做。(Go 进阶训练营 – 评论系统架构设计二:详细设计)
cache不存在更新DB,cache存在更新cache+DB
cache miss后由缓存服务加载并写cache
只更新缓存,缓存服务异步更新DB
miss后由缓存服务加载+写cache
- **Linux Page Cache 思想类似**,通过将磁盘中的数据缓存到内存中,从而减少磁盘I/O操作,提高性能。写文件时,只写到缓存,不会立即写磁盘,通过内核线程定时同步写到磁盘(**Write back**)。存在数据丢失概率。
- **和Redis的AOF重写是一个思想。**
三种模式各有优劣,不存在最佳模式。实际上,我们也不可能设计出一个最佳的完美模式出来,如同前面讲到的空间换时间、访问延迟换低成本一样,高性能和强一致性从来都是有冲突的,系统设计从来就是取舍,随处需要 trade-off。根据业务场景,更好的做 trade-off,从而设计出更好的服务系统。