4种缓存模式

概述:
在系统架构中,缓存可谓提供系统性能的最简单的方法之一,稍微懂点开发的人必然会和缓存打交道,最起码也实践过.
在不同的场景下,锁使用的策略也是有变化的,如果在你的印象中,缓存还是个简单的查询,更新,操作,那么这篇文章你要学习下.
这里为大家家烧4种缓存模式以及使用场景.
缓存策略的选择
从本质上讲,缓存取决于数据访问模式,换句话说,数据是如何写和读的
例如:
系统是写多读少吗?
数据是否只写入一次被读取多次?
返回的数据是唯一的吗?
常用的缓存有一下4种
1.Cashe-Aside-Pattern:旁路缓存模式
2:Read Through Cache Pattern 读穿透模式
3:Write Though Cache Pattern 写穿透模式
4:Write Behind Pattern 又叫Write Back ,异步缓存写入模式

Cache Aside
Cache Aside是最常见的缓存模式,应用程序可以直接与缓存和数据库对话,Cache Aside可以用来读操作和写操作
在这里插入图片描述
读操作流程

  1. 应用程序接收到数据查询请求
  2. 应用程序需要查询的数据是否在缓存上
    - 如果存在Cache hit,从缓存上查出的数据,直接返回
    - 如果不存在Cache miss, 则数据库中检索数据,并存入缓存中,返回结果数据.
    在这里需要留意的是一个操作的边界,就是数据库和缓存操作均由应用程序直接进行操作.
    写的操作流程图
    在这里插入图片描述
    这里的写操作,包括创建,更新和删除,在写操作的时候,Cache Aside模式是先更新数据库(增,删,改)然后直接删除缓存.
    Cache Aside 模式可以说是大多数场景下使用的,通常为了应对类型的数据,还可以有两种策略来加载缓存:
    • 使用时加载缓存:当需要使用缓存数据时,从数据库中查询出来,在第一次查询之后,后续请从缓存中获得数据
    • 预加载缓存 在项目启动的时候启动,或者启动后通过预加载缓存信息,比如"国家信息.货币信息,用户信息,新闻信息"等不变的数据.
      Cache Aside适用于读多写少的场景,比如用户信息,新闻报道,一旦写入缓存,几乎不会进行修改,该模式的缺点就是和数据库的双写不一致的情况.
      Cache Aside也是一个标准的模式,像FaceBook,也是采用的这种模式

ReadThrough
Read-Through 和Cache-Aside很相似,不同点在于程序员不需要关注从哪读取数据(缓存还是数据库),他只需要从缓存中读取,而缓存中的数据从哪来是由缓存决定的
Cache Aside是由调用方负责把数据加载到缓存,而ReadThrough则用缓存服务来自己加载,从而对的是透明的.Read-Through的优势是让代码变的更简洁.
这里就涉及到上面锁说的程序员操作的边界问题了,下面来看流程图
在这里插入图片描述
在上述流程中,重点关注下虚拟线框里面的操作,这部分不再由应用程序员来处理,而是由缓存存放来处理,也就是说,当应用魂村中查找某条数据的时候,如果数据不存在则由缓存来完成数据加载,最后再由数据结构给应用程序.
Write Through
在Cache Aside 中,应用程序需要维护两个数据存储,一个缓存,一个数据库,这个对应应用程序来说,有一些繁琐.
Write-through模式下,所有的写操作都经过缓存,每次向缓存中 写数据的时候,缓存就会把数据持久到对应的数据库中去,且这个操作在一个事务中完成,因此,只有两次都成功了才是最终写成了,坏处是写延迟,好处是保证了数据的一致性
可以理解 为,应用程序认为后端就是一个单一的存储,而存储资深维护自己的Cache.
因为程序员只和缓存打交道.编码会变的更加简单和整洁,当需要在处理多个相同的逻辑时就变的格外明显.
在这里插入图片描述
当使用Write-Through时,一般都配合使用Read-Throughl来使用,Write-through的潜在使用的场景是银行系统
Write-Through适用的情况
需要频繁读取相同的的数据.
不能忍受数据丢失(相对Write-Behind而言)和数据不一致
在使用Write-Through时要特别注意的是缓存的有效性管理,否则会导致大量的缓存占用内存资源,甚至有效的缓存数据被无效的缓存数据清除掉

Write–Behind
Write-Behind和Write-through在程序只和缓存交互且只能通过缓存写数据在这方面很相似,不通过的Write-Through,会把数据理立即写入到数据库中,而Write-Behind会在一段时候后,把数据一起写入数据库,这个异步写的操作是Write-Behinds的最大特点

数据库写操作可以用不同的方式,其中一个方式就是收集所有的操作并在某个时间点(比如数据库负载的时候)批量写入,另一种就是合并几个操作成为一个小批次操作,接着缓存收集写操作一起批量写入.
异步写操作极大的降低了请求延迟并减轻了数据库的负担,同时也放大了数据不一致的,比如有人此时直接从数据库中查询数据,但是更新的数据还是未被写入数据库,此时查询的数据就不是新的数据.
小结

不同的缓存模型,有不同的考量点和特征,根据应用的场景,和需求不同,需要灵活的选择适合的缓存模型,在实践的过程中往往也是多个模型相结合使用.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值