在设计缓存系统时需要考虑不同缓存策略的优缺点和适用场景,通过了解和应用这些策略,可以优化缓存系统的性能和效率。原文: 6-Caching Strategies to Remember while designing Cache System
缓存的目标是减少从原始数据源获取数据的次数,从而加快处理速度并减少延迟。
缓存可以在不同体系架构级别上实现,包括内存缓存、磁盘缓存、数据库缓存和CDN缓存。
可以用不同的技术缓存数据,每种技术都有其优缺点。比如内存缓存将数据存储在计算机主内存中,与磁盘缓存相比,可以实现更快的访问速度。
另一方面,磁盘缓存将数据存储在硬盘上,速度比内存慢,但相对访问远程数据源的速度还是要快得多。
使用数据库缓存,将频繁访问的数据存储在数据库中,从而减少从外部存储检索数据的需要。
最后,CDN缓存将数据存储在分布式服务网络中,从而减少访问远程数据的时延。
为了提高缓存系统的效率和性能,非常重要的一点是需要监控各种指标,从而根据指标做出有关缓存系统的重要业务决策。
需要考虑的参数有:
如果一直监控这些性能指标,就可以据此优化缓存系统,以获得更高的吞吐量和更低的时延。
读密集型应用(如Wordpress/静态图像网站)需要设计缓存系统,以支持更多的读缓存。
下面是一些有用的方法:
Cache-aside方法是最常用的缓存策略之一。
方法
优缺点
在read-through方法中,缓存对数据库进行读取/查询操作,然后更新自己并将请求数据返回给最终用户。
方法
优缺点
Refresh-ahead策略是在过期之前刷新缓存数据,该方法适用于热数据,即预计在不久的将来会被请求的数据。
方法
优缺点
因此,refresh-ahead缓存本质上是在下一次可能的缓存访问之前以配置的间隔刷新缓存。在这种读流量非常高的系统中,几毫秒内可能会发生几千个读操作。
任何写密集型应用程序都需要缓存策略,例如:
Write-Through策略将缓存作为其主数据存储,即首先在缓存中更新数据,然后才在数据库中更新数据。
下面是应用想要写入数据或更新值时发生的情况:
优缺点
当与read-through配合使用时,在网络调用中非常有效,数据首先被读/写到缓存中,使得几乎不会发生缓存无效的情况。由于所有数据都是新的和经常访问的数据,而且所有对数据库的写入都是通过缓存完成,使得数据库和缓存几乎始终保持一致。
Write-back方法与write-through非常相似,只是数据库写调用是异步的。
优缺点
在Write-around方法中,首先将数据更新到数据库,然后数据库对缓存进行异步调用以更新key。
方法
优缺点
Write-around可以与read-through结合使用,在数据只写入一次,读取频率较低或从不读取的情况下提供良好的性能(例如实时日志或聊天室)。同样,这种模式也可以与cache-aside结合使用。
缓存失效是从缓存中删除陈旧或过时数据的过程,以确保只保留最新的可用数据。缓存失效策略有:
具体失效方法包括清除、禁止、刷新等。
总之,上文提到的策略永远不会单独或孤立的起作用,而总是组合工作。例如,Write-around策略可以与Cache-aside策略一起实现,以确保数据一致性。更重要的是,应该了解应用程序的读/写访问模式,因为选择错误的组合可能无法带来最好的结果。
例如,如果在实际应该使用write-around/read-through(写入的数据访问频率较低)时选择了write-through/read-through,那么缓存中就会有无用的垃圾。
- END -你好,我是俞凡,在Motorola做过研发,现在在Mavenir做技术工作,对通信、网络、后端架构、云原生、DevOps、CICD、区块链、AI等技术始终保持着浓厚的兴趣,平时喜欢阅读、思考,相信持续学习、终身成长,欢迎一起交流学习。为了方便大家以后能第一时间看到文章,请朋友们关注公众号"DeepNoMind",并设个星标吧,如果能一键三连(转发、点赞、在看),则能给我带来更多的支持和动力,激励我持续写下去,和大家共同成长进步!
本文由 mdnice 多平台发布