如果用缓存提高性能

90 阅读2分钟

「这是我参与2022首次更文挑战的第7天,活动详情查看:2022首次更文挑战」。

数据库的性能有瓶颈,受限于磁盘读写速度、内存大小、cpu 性能等,而且很多场景下,单纯靠数据库无法满足需求:

  • 经过复杂运算得出的数据,不可能每次用的时候都查数据库算一遍
  • 读多写少的数据,也不可能每次都查一遍数据库

所以我们需要引入缓存来解决一次生成、多次使用的问题,避免每次都要访问数据库。缓存能极大提高访问性能。

但是引入新的层会增加系统的复杂度,所以我们需要对这些复杂度做到心中有数。

缓存穿透

缓存穿透是指缓存没有对应数据,直接查的是数据库,通常有以下几种情况:

  1. 数据确实不存在,这时候需要设置一个默认值,防止被攻击;
  2. 缓存数据生成耗费大量资源,这时候需要采用分页等机制控制缓存的规模

缓存雪崩

缓存雪崩就是指大量缓存同时失效,从而引起系统的性能直线下降,拖慢整个系统,严重的会造成数据库挂掉。缓存雪崩的常见解决方式有:更新锁机制和后台更新机制。

  • 更新锁机制:对缓存更新进行加锁保护,保证每次更新只有一个线程能执行,对于分布式系统甚至可以考虑用分布式锁
  • 后台更新机制:不使用默认的缓存更新机制,后台设定一个独立的更新线程,定时进行缓存更新;需要考虑内存不足导致的缓存失效等问题。总的来说后台更新机制币更新锁机制简单一些

缓存热点

多台缓存服务器的情况下,如果访问量都几种在少数几条数据上,那么这几条数据就是热点数据,它所在的服务器会承受较大的压力