缓存优化

1、了解内存缓存

1. 1、什么是缓存

在计算中,缓存是一个高速数据存储层,其中存储了数据子集,且通常是短暂性存储,这样日后再次请求此数据时,速度要比访问数据的主存储位置快。通过缓存,可以高效地重用之前检索或计算的数据。缓存本质上是以空间换时间,提高接口的响应速度。

硬件

是指一块芯片被集成到硬盘或者CPU上,作用就是充当硬盘,CPU与外界的接口之间的一个暂存器。这里的外界接口通常是指硬盘和内存,或者是CPU与内存之间。利用缓存可以减轻系统的负载,同时提高传播效率。

客户端缓存

为了实现可以快速地响应用户的请求,会把之前用户浏览的信息,比如:一些图片,视频,css样式等,存在本地,在下次访问的时候,如果本地缓存有这些内容的话就会直接展示出来,不会再像我们服务器端发送新的请求。

服务器端缓存

与客户端缓存的目的是相同的,不过是站在服务器这边的一个考虑,如果每次用户的请求都要连接一次数据库的话,那当用户的请求数很多的时候,服务器的后台压力就会非常大。可以把一些经常被请求的数据放入内存中,当有请求到来的时候就可以直接返回,不用再次访问数据库,就会降低服务器的一个压力。

1.2、 使用缓存

  • 对缓存的常用操作描述

    查询时,先读取缓存,如果缓存中没有数据,则触发真正的数据获取,如果缓存中有数据,直接返回缓存中的数据;

    新增数据时,将数据写入缓存;

    删除数据时,删除对应的缓存数据。并且可以自定义每个KEY的缓存有效期。

数据库的并发量大:读写分离+缓存

数据库的数据量大:分库分表

1.3、缓存使用的常见场景

  1. 高并发查询:例如用户在客户端使用脚本定期批量查询商品库存。
  2. 热点查询:例如大批量库存查询请求集中于少部分热门商品。
  3. 高并发写入:例如库存充足时,大量并发下单请求。
  4. 热点写入:例如库存充足时,针对少部分热门商品大量并发下单请求。
  5. 大对象初始化

1.4、 使用缓存的好处

  • 提高应用程序性能

因为内存速度远远高于磁盘,所以从内存缓存中读取数据是非常快的,大大提升了数据访问速度。

  • 降低数据库成本

缓存实例可以取代大量数据库实例,从而降低总成本

  • 减少后端负载

通过读取负载的重要部分从后端数据库中,定向到内存层,缓存可以降低数据库上的一个负载,防止其在负载情况下性能下降,甚至可以防止在高峰期的时候雪崩。

  • 可预测的性能

现代应用程序的一个挑战是应用程序使用的高峰时的一个处理时间,比如双十一时候,电子商务网站会不断在增加负载,会使获取数据时的时间延长,从而使总体的应用程序性能不可预测,通过应用高吞吐量的内存缓存可以缓解此问题。

  • 消除数据库热点

在许多应用程序中,可能只有很少一部分的数据会被经常访问,会在你的数据库中产生热点,并可能根据最常用的数据的吞吐,要求过多地预支数据库中的资源,通过在内存缓存中缓存常用的数据,就不需要为最常访问的数据过度去预置,并能够提供快速的可预测性。

  • 提高读取吞吐量(IOPS):

相比于同等的基于磁盘的数据库,除了更低的延迟外,内存系统还提供了更高的请求率,用作分布式这种类似的缓存的话,单个实例可以处理是十万个请求,例如rides。

1.5、缓存的常用类型

  • 内存缓存(进程内缓存,性能最好)
  • 分布式缓存
  • 组合缓存(多级缓存)

1.6、 缓存的特点

  • 设置存活时间(过期策略)

缓存通常设置有效期,过期后应当失效,常见的过期策略有:定时、定期、惰性失效

  • 空间占用有限(淘汰策略)

缓存占用有空间上限,超过上限需淘汰部分缓存数据,常见的淘汰策略有:FIFO(基于队列实现LinkedHashMap)、LRU、LFU

  • 支持并发更新

缓存需要支持并发的读取写入。

1.7、缓存使用时的常见问题

  • 缓存穿透

请求数据中不存在的数据,导致每次都无法从缓存中命中,继而访问到数据库。

  • 缓存击穿

缓存失效的同时大量相同请求穿过缓存访问到数据。

  • 缓存雪崩

大量缓存同时失效,导致大量请求穿过缓存访问到数据库。

1.8、 常用内存缓存的实现方式

  • Java容器 :基于JDK自带的Map容器类HashMap、ConcurrentHashMap
  • Guava Cache : Google提供的Java增强工具包Guava的一个模块,社区活跃
  • Ehcache :重量级的内存缓存,支持2级缓存,Hibernate中默认的缓存框架
  • Caffeine :基于Guava API开发的高性能内存缓存,Spring 5默认的内存缓存框架

1.9 缓存的几个关键要素

  1. 缓存命中率;

  2. 缓存容量空间;

  3. 缓存清除策略;

    • FIFO:最少使用策略
    • LRU:最近最少
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值