编程指南-学习建议编程指南-学习建议
首页
学习方向
技术学习
🚀 编程指南
首页
学习方向
技术学习
🚀 编程指南
  • 三、技术学习

    • 技术指南

      • 前端技术知识

        • 什么是前端?
      • 后端技术知识

        • 什么是缓存?
        • 什么是工作流技术?
        • 什么是反向压力?
        • 什么是热数据探测?
        • 数据库也能版本控制?
        • /tech-learning/guide/backend/how-search-engine-works.html
        • /tech-learning/guide/backend/learn-concurrency.html
        • /tech-learning/guide/backend/other-databases.html
      • 通用技术知识

        • 什么是前后端分离?
        • /tech-learning/guide/general/what-is-redirect.html
        • 什么是单例模式?
        • /tech-learning/guide/general/what-is-magic-value.html
        • 什么是负载均衡?
        • /tech-learning/guide/general/what-is-multi-env.html
        • /tech-learning/guide/general/what-is-magic-number.html
        • 什么是 Linux?
        • /tech-learning/guide/general/what-is-cloud-dev.html
    • 系统设计

      • 如何设计一个实时排行榜系统?
      • /tech-learning/system-design/elasticsearch-optimization.html
      • /tech-learning/system-design/file-upload.html
      • /tech-learning/system-design/log-system.html
      • /tech-learning/system-design/software-sword.html
      • 如何设计好 API 接口?
      • /tech-learning/system-design/sdk-development.html
      • /tech-learning/system-design/architecture-design.html
      • /tech-learning/system-design/release-stability.html
    • 开发经验

      • 解决 Bug 经验
      • 如何快速上手新项目?
      • /tech-learning/dev-experience/enterprise-software.html
      • /tech-learning/dev-experience/opensource-contribute.html
      • 什么是代码规范?为什么要遵循代码规范?
      • /tech-learning/dev-experience/company-standards.html
      • /tech-learning/dev-experience/code-reuse.html
      • /tech-learning/dev-experience/quick-website.html
      • /tech-learning/dev-experience/vscode-remote.html
      • /tech-learning/dev-experience/linux-vm-remote.html
      • /tech-learning/dev-experience/young-contributor.html
      • /tech-learning/dev-experience/no-force-shutdown.html
      • /tech-learning/dev-experience/no-hardcode.html
      • /tech-learning/dev-experience/backend-attention.html
      • 千万别直接敲代码!(写代码前要做的事)
      • /tech-learning/dev-experience/project-attention.html
      • /tech-learning/dev-experience/website-online.html
      • /tech-learning/dev-experience/tech-selection.html

什么是缓存?

缓存是后端开发中很重要的概念,今天来科普一下。

什么是缓存

简单说,缓存就是把经常用到的数据存在一个访问速度更快的地方。

举个例子:

  • 你每次去图书馆借同一本书,都要走20分钟
  • 你把这本书买下来放在家里,想看的时候直接拿

家里的书就是"缓存",省去了每次去图书馆的时间。

为什么需要缓存

数据库太慢了

数据库是把数据存在硬盘上的,读写速度有限。

如果每次请求都去查数据库,在高并发情况下数据库扛不住。

缓存快得多

缓存通常是把数据存在内存里,读写速度是硬盘的几百倍。

把热点数据放在缓存里,可以大大提高系统性能。

常见的缓存

本地缓存

就是把数据存在应用程序的内存里。

优点是快,缺点是重启就没了,而且分布式环境下不能共享。

Redis

最流行的分布式缓存。把数据存在独立的缓存服务器上。

优点是可以共享、可以持久化,是企业开发最常用的缓存方案。

CDN

内容分发网络,把静态资源(图片、JS、CSS)缓存在离用户近的节点上。

让用户访问更快。

缓存的常见问题

缓存穿透

查询一个不存在的数据,每次都打到数据库。

解决:对不存在的key也缓存一个空值。

缓存击穿

热点key过期的瞬间,大量请求打到数据库。

解决:热点key不过期,或者用互斥锁。

缓存雪崩

大量key同时过期,请求全打到数据库。

解决:过期时间加随机值,分散过期时间。

缓存一致性

数据库改了,缓存还是旧数据。

解决:先更新数据库,再删除缓存。

面试常考

缓存是后端面试的高频考点,这几个问题一定要搞懂:

  • Redis的数据结构
  • 缓存穿透、击穿、雪崩
  • 缓存和数据库一致性
  • Redis持久化

最后

缓存的核心思想是:用空间换时间。

把常用的数据存一份在快速访问的地方,减少对慢速存储的访问。

这个思想在计算机里到处都是:CPU缓存、浏览器缓存、数据库缓存……理解了这个思想,很多东西都能触类旁通。

上次更新: 2025/12/7 09:34
Next
什么是工作流技术?