什么是缓存?
缓存是后端开发中很重要的概念,今天来科普一下。
什么是缓存
简单说,缓存就是把经常用到的数据存在一个访问速度更快的地方。
举个例子:
- 你每次去图书馆借同一本书,都要走20分钟
- 你把这本书买下来放在家里,想看的时候直接拿
家里的书就是"缓存",省去了每次去图书馆的时间。
为什么需要缓存
数据库太慢了
数据库是把数据存在硬盘上的,读写速度有限。
如果每次请求都去查数据库,在高并发情况下数据库扛不住。
缓存快得多
缓存通常是把数据存在内存里,读写速度是硬盘的几百倍。
把热点数据放在缓存里,可以大大提高系统性能。
常见的缓存
本地缓存
就是把数据存在应用程序的内存里。
优点是快,缺点是重启就没了,而且分布式环境下不能共享。
Redis
最流行的分布式缓存。把数据存在独立的缓存服务器上。
优点是可以共享、可以持久化,是企业开发最常用的缓存方案。
CDN
内容分发网络,把静态资源(图片、JS、CSS)缓存在离用户近的节点上。
让用户访问更快。
缓存的常见问题
缓存穿透
查询一个不存在的数据,每次都打到数据库。
解决:对不存在的key也缓存一个空值。
缓存击穿
热点key过期的瞬间,大量请求打到数据库。
解决:热点key不过期,或者用互斥锁。
缓存雪崩
大量key同时过期,请求全打到数据库。
解决:过期时间加随机值,分散过期时间。
缓存一致性
数据库改了,缓存还是旧数据。
解决:先更新数据库,再删除缓存。
面试常考
缓存是后端面试的高频考点,这几个问题一定要搞懂:
- Redis的数据结构
- 缓存穿透、击穿、雪崩
- 缓存和数据库一致性
- Redis持久化
最后
缓存的核心思想是:用空间换时间。
把常用的数据存一份在快速访问的地方,减少对慢速存储的访问。
这个思想在计算机里到处都是:CPU缓存、浏览器缓存、数据库缓存……理解了这个思想,很多东西都能触类旁通。
