后台开发必备:每个程序员都应掌握的缓存技术
共 7991字,需浏览 16分钟
·
2024-07-02 08:45
👉目录
1 缓存策略
2 缓存类型
3 缓存淘汰策略
4 缓存常见问题
5 总结
-
提升接口响应速度:缓存相比 IO 请求、数据库查询速度要快得多,适当使用缓存提升响应速度 -
降低数据源服务的负载压力:将需要高并发读取的数据缓存起来,当相同请求进来时返回缓存数据,减轻数据源服务(如数据库、上游系统)的负载压力 -
减少计算资源的浪费:将需要复杂且耗时计算的结果缓存起来,减少相同请求导致的重复计算资源浪费
01
腾讯云 CDN 具有海量资源储备、全球智能调度、一键接入、丰富功能等产品优势,欢迎企业及用户了解试用:https://cloud.tencent.com/product/cdn
02
-
优势: 使用简单;无外部依赖;读取速度快(无网络 IO 请求); -
缺点: 空间小:应用程序的服务器资源有限,所以本地缓存的空间小;分布式一致性问题:如果后台服务是分布式架构的,那么不同的服务实例之间的本地缓存可能会有差异;无法持久化:本地缓存会随着进程结束而被销毁,无法持久化。
-
优势: 空间充足:外部存储一般空间都很充足;无分布式一致性问题:不同的服务实例连接同一个缓存服务,不存在一致性问题;主流的分布式缓存,如 redis,支持数据持久化和恢复,当缓存服务挂了可以恢复数据。 -
缺点: 引入外部依赖、需要部署和运维单独的缓存服务。
-
支持多种数据结构,如:list,set,zset,hash 等数据结构。 -
支持数据的持久化和恢复。 -
支持多种集群模式:主从复制、哨兵模式和 Cluster 模式,保证高可用、容灾恢复、易于扩展。 -
能提供毫秒级别的响应速度。 -
Redis 6.0 引入了多线程 IO,之前是单线程模型。
-
主要支持简单的键值对存储。 -
不支持持久化和恢复。 -
集群:可以通过客户端分片实现分布式存储。 -
多线程,非阻塞 IO 模式。 -
能提供毫秒级别的响应速度。
03
04
-
一是大量的缓存 key 在同一时间失效 -
二是缓存服务不可用,请求都被透传到数据库。
-
设置合理的缓存失效时间:合理设置过期时间,分散缓存的失效时间,避免缓存在同一时间失效。 -
保证缓存服务的高可用:使用独立的缓存服务,尽量使用缓存集群,保证缓存服务的高可用和容灾恢复。
-
未对请求参数进行合理的校验和拦截。 -
被精心构造的恶意请求攻击。
-
设置合理的参数校验:通过设置合理的校验规则,比如 id 范围、名称正则规则等,对不合理或空值请求的参数的进行过滤和拦截。 -
缓存空值处理:即使数据源返回空值,也在缓存层将其保存起来。可能对其数值设置一些标记,比如 value=-1 等等,方便服务识别为空值。同时,也可以为空值的缓存设置一个较短的失效时间。
-
使用互斥锁或者分布式锁,对数据的回源操作进行上锁,保证同一时刻只有一个请求被透传到数据源服务。 -
热点数据的缓存永不过期,由数据源主动更新缓存。 -
热点数据预加载:在缓存数据将要过期时,由后台服务主动更新热点数据缓存,防止缓存失效。
05
📢📢欢迎加入腾讯云开发者社群,享前沿资讯、大咖干货,找兴趣搭子,交同城好友,更有鹅厂招聘机会、限量周边好礼等你来~
(长按图片立即扫码)
评论