缓存那些事之初识缓存

作者 : 开心源码 本文共1922个字,预计阅读时间需要5分钟 发布时间: 2022-05-13 共210人阅读

前言

缓存应该是技术人员最常见的一个词了,但是或者许不是所有人都能精确的说出缓存本质是什么,又适用于什么情况,可能遇到哪些问题,应该怎样来处理。下面我就分三篇文章来给大家详细详情下缓存相关的知识。疏漏不足之处,也请指正,不胜感激。

《缓存那些事之初识缓存》
《缓存那些事之缓存升级、失效以及内存淘汰策略》
《缓存那些事之常见问题与处理方案》

什么是缓存

要理解缓存,首先要知道缓存的本质是什么。简单来说,缓存是目标资源的备份,它是一种快速响应的技术,主要用于消除请求方和提供方性能上的差异,提升系统的总体性能。最早是CPU高速缓存,用于减少访问内存所需平均时间,后面拓展到了计算机领域的各个方面。

举个例子,我们常见的浏览器缓存,可以把远程网络请求数据保存在本地,这样下次请求数据的时候就不用再次访问远程服务器,而是直接通过本地缓存获取到目标资源,从而大大减少对服务器的压力,提升系统总体性能。

这里要注意的是,缓存是目标资源的副本,所以,事实上 cookie,session 不是缓存,而是存储,由于它们并不是其余资源的副本。它们的目的也不是为了平衡系统性能上的差异,而是起到数据存储的作用。

缓存的原理

我们知道CPU 的计算速度通常不是软件执行的瓶颈,IO的速度会更大地影响软件执行的速度,从“近”到“远”,一般有以下几个场景:

  • 访问内存
  • 访问磁盘
  • 访问网络

软件设计的性能提升,都是想办法使进程更靠近数据,减少数据在慢速介质中的传输。另外木桶效应也告诉我们,系统的整体性能总受限于最差的一个地方。所以假如我们可以减少消耗大的操作,或者者把消耗大的操作改成消耗小的操作(例如访问网络改成访问磁盘),就能有效的提升系统的性能。而缓存技术就是为了实现这一目标而出现的。

总体而言,访问缓存相比于直接访问目标资源消耗的时间和性能更少。例如上面浏览器缓存的例子,假如没有浏览器缓存,我们需要经过:

  • 网络请求
  • 访问磁盘获取数据
  • 网络请求返回数据

而有了浏览器缓存之后呢,我们只要要经过:访问磁盘获取数据就可,这样大大加快了页面的响应速度,服务器也能为更多的用户端服务。

缓存分类

缓存其实一种通用技术,存在计算机领域的各个层级,例如CPU缓存,文件缓存,网络请求中的缓存,应用缓存,服务端缓存等等。其原理和实质非常类似,但是又有所不同,下面详情的内容是基于服务端缓存,例如Redis。

使用场景

使用缓存也不是只有好处没有坏处的地方,事实上,使用缓存会引入的肯定的技术复杂度。因而在我们使用缓存之前,首先最重要的就是确认项目能否真的需要缓存,以及哪些数据适合使用缓存。

缓存本身就是为理解决系统性能最差的一块木板,从而提升系统整体性能,所以假如我们的系统还没有达到受限于某一块的性能而无法再提升性能的地步,那可能还不需要引入缓存技术。简单来说,就是低并发低流量的应用引入缓存并不会带来性能的明显提升,反而会带来应用的复杂度提升以及极高的运维成本,而在高并发大流量的业务场景中引入缓存相对而言收益会更高。

那么哪些数据适合使用缓存呢?一般来说,具备以下性质的数据适合做缓存:

  • 数据可能会被频繁的被使用且变化频率不高
  • 数据本身不大
  • 数据一致性要求不高

事实上也很容易了解,缓存也是有成本的,被频繁使用的数据我们使用缓存才有意义,假如一个数据一年才使用一次,那使用缓存就很白费了。而变化频率不高让我们不需要经常升级缓存,假如一个数据频繁的需要被升级,那缓存也会经常用不上(缓存升级策略决定的,升级数据的时候要让对应的缓存失效,后续文章会详情到)。

另外假如数据本身很大,那我们可以缓存的数据量也会很少,同时存取也会更耗时,这样的缓存使用起来的效率也不高。

最后,缓存毕竟是目标资源的备份,也就是说缓存有可能是和目标资源不一致的,有可能是数据还没升级到缓存,也有可能是脏数据。假如是对数据一致性要求非常高的数据,那也不适合使用缓存。当然缓存也可以做到非常高的一致性,但是那就需要引入其余技术了,例如分布式事务提交,这就又会引入更多的技术复杂度,需要根据实际情况去选择了。

如何来评价缓存系统设计

假如我们决定要使用缓存技术了,那么如何来判断我们的缓存系统设计的好不好的,主要看命中率。

命中率=返回正确结果数/请求缓存次数。我们使用缓存的目的就是为了用缓存来补足系统薄弱的地方,因而缓存命中率是衡量缓存有效性的重要指标。只有命中率高,才说明我们缓存被有效使用到了,那才能说我们的缓存系统的设计是正当且高效的。

参考链接

《什么时候需要自己搭建缓存服务》

Enjoy it !

假如觉得文章对你有用,可以资助我喝杯咖啡~

版权公告

转载请注明作者和文章出处
作者: X先生
首发于 https://www.songma.com/p/374f9f385e2d

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 缓存那些事之初识缓存

发表回复