cache同步机制之读写
1.概念解析
cache :这里的cache可以指L1,L2,L3这种CPU缓存,也可以是内存,也可以是磁盘缓存,区别在于处于什么场景下。
内存 :对于cache的后端存储,总之是在cache之后。或是持久或是非持久的存储。
cache hit :当从cache中读取数据时,恰好命中,读到数据,又称缓存命中
cache miss: 对应cache hit ,在缓存中没有读到数据,需要到后端存储读取。
对应还有write miss , write hit , read miss ,read hit.
2.写同步
现在的CPU是由L1,L2,L3,内存,物理存储五级存储方式,访问速度是越来越慢,那么对于数据传递过程该如何定义呢?
2.1) write through cache :
每次刷新cache时,同时同步的将数据刷新到内存中。优点:简单,缺点:相比较来说慢一些。
2.2) write back cache
刷新数据到cache中,但是不立刻同步数据到内存,但标志这些数据在内存中是脏数据,等到这些数据要会清理出缓存的时候(例如LRU算法),再将数据刷新到内存中,因为很多场景下有些数据只是一些中间数据,并不是最终数据。优点:CPU效率高,但是实现复杂。还需要承担在cache中数据未刷新到内存中的风险。
以上两种方式是在走两个极端,一个极端是有数据就立刻同步,另一个极端就是等有需要删除数据时就同步数据(这个也是memcached服务端的实现策略)。那么有没有一种介于这两者之间的传递数据方式呢?那就是post write 。
2.3) post write
cpu更新缓存时,把更新的数据写入到一个更新缓存器中,在合适的时候更新数据到内存中,这个时机需要根据具体的业务场景来分析,可以是定时,也可以是某种触发机制下,例如更新缓存器中数据达到多少的比例。简单的话就是异步的方式同步数据。这种方式也面临的问题就是写数据在缓存中丢失的问题都需要去考虑容灾。
3.读同步
在第一个节点已经介绍可cache hit && cache miss .那么在cache miss的情况下如何处理呢?有两种:
读取数据有两种,一种是从后端存储中读到数据后直接放到CPU,这种称之为:read through,另一种就是读取数据后,先放到cache中,再从cache中读取数据。
cache hit && cache miss 的资料写入
我们在cache中读到数据,需要重写回去,那么就上面提到的三种写策略
但是是针对写入过程中原来数据已经不存在了的情况有以下两种处理方式:
1.Write allocate:将写入数据从内存中读入缓存,然后采用write-hit(缓存命中写入)操作。写缺失操作与读缺失操作类似。
2.No-write allocate:方式并不将写入位置读入缓存,而是直接将数据写入存储。这种方式下,只有读操作会被缓存,因为不会有新数据写入缓存,都直接写内存了。
同步以上的分析,我们大致知道了CPU是如何处理L1和内存之间的数据同步的,那么我们在自己做缓存设计的时候也可以参考。
以上内容是自己摘取分析的成果,若有问题,欢迎指出!
分享到:
相关推荐
python学习资源
jfinal-undertow 用于开发、部署由 jfinal 开发的 web 项目
基于Andorid的音乐播放器项目设计(国外开源)实现源码,主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。
python学习资源
python学习资源
python学习一些项目和资源
【毕业设计】java-springboot+vue家具销售平台实现源码(完整前后端+mysql+说明文档+LunW).zip
HTML+CSS+JavaScarip开发的前端网页源代码
python学习资源
【毕业设计】java-springboot-vue健身房信息管理系统源码(完整前后端+mysql+说明文档+LunW).zip
成绩管理系统C/Go。大学生期末小作业,指针实现,C语言版本(ANSI C)和Go语言版本
1_基于大数据的智能菜品个性化推荐与点餐系统的设计与实现.docx
【毕业设计】java-springboot-vue交流互动平台实现源码(完整前后端+mysql+说明文档+LunW).zip
内容概要:本文主要探讨了在高并发情况下如何设计并优化火车票秒杀系统,确保系统的高性能与稳定性。通过对比分析三种库存管理模式(下单减库存、支付减库存、预扣库存),强调了预扣库存结合本地缓存及远程Redis统一库存的优势,同时介绍了如何利用Nginx的加权轮询策略、MQ消息队列异步处理等方式降低系统压力,保障交易完整性和数据一致性,防止超卖现象。 适用人群:具有一定互联网应用开发经验的研发人员和技术管理人员。 使用场景及目标:适用于电商、票务等行业需要处理大量瞬时并发请求的业务场景。其目标在于通过合理的架构规划,实现在高峰期保持平台的稳定运行,保证用户体验的同时最大化销售额。 其他说明:文中提及的技术细节如Epoll I/O多路复用模型以及分布式系统中的容错措施等内容,对于深入理解大规模并发系统的构建有着重要指导意义。
基于 OpenCV 和 PyTorch 的深度车牌识别
【毕业设计-java】springboot-vue教学资料管理系统实现源码(完整前后端+mysql+说明文档+LunW).zip
此数据集包含有关出租车行程的详细信息,包括乘客人数、行程距离、付款类型、车费金额和行程时长。它可用于各种数据分析和机器学习应用程序,例如票价预测和乘车模式分析。
把代码放到Word中,通过开发工具——Visual Basic——插入模块,粘贴在里在,把在硅基流动中申请的API放到VBA代码中。在Word中,选择一个问题,运行这个DeepSeekV3的宏就可以实现在线问答
【毕业设计】java-springboot+vue机动车号牌管理系统实现源码(完整前后端+mysql+说明文档+LunW).zip
【毕业设计】java-springboot-vue交通管理在线服务系统的开发源码(完整前后端+mysql+说明文档+LunW).zip