Spring Boot 缓存实战:用 Redis 给天气接口提速,一个开箱即用的 Demo 讲解
Spring Boot 缓存实战:用 Redis 给天气接口提速,一个开箱即用的 Demo 讲解
https://github.com/fanqingsong/Springboot-caching-demo
https://docs.spring.io/spring-boot/index.html
Spring Boot 缓存实战:用 Redis 给天气接口提速,一个开箱即用的 Demo 讲解
如果你正在学 Spring Boot 的缓存机制,或者想在项目里落地"缓存"这个性能优化手段,那么这个仓库
fanqingsong/Springboot-caching-demo是一个非常值得上手练手的项目。它用一个"天气数据"场景,把内存缓存和 Redis 缓存讲透了。
一、这个项目到底做了什么?
一句话概括:这是一个 Spring Boot API,把天气数据存在 PostgreSQL 里,再把查询结果缓存到 Redis 中。
核心思路很朴素——数据库查询慢、开销大,如果同样的数据被反复请求,为什么每次都要去"打扰"数据库?把结果放到缓存里,下次直接命中,响应速度立刻起飞。
项目通过三个核心注解来控制"什么该缓存、怎么更新、什么时候失效":
@Cacheable:读缓存,有就直接返回,没有才查库并写入缓存;@CachePut:写缓存,用于更新数据后同步刷新缓存;@CacheEvict:清缓存,数据删除或变更时让旧缓存失效。
而真正承担"存储"角色的,是 Redis。
二、技术亮点:一套代码,三种缓存方案自由切换
这个 Demo 最有价值的地方,在于它没有只演示一种缓存,而是把 Spring Boot 支持的三种缓存提供者都做了进来:
| 缓存方案 | 说明 |
|---|---|
simple(ConcurrentHashMap) |
Spring 内置的简单内存缓存,零依赖,适合入门理解 |
| Caffeine | 高性能的本地内存缓存,带淘汰策略,适合单机场景 |
| Redis | 独立的分布式缓存服务,可持久化、可集群,适合生产环境 |
这意味着你可以通过配置切换 provider,直观对比"进程内缓存"和"独立缓存服务"的差异,非常适合建立对缓存选型的直觉。
三、贴近生产的设计细节
虽然是 Demo,但项目里的一些设计已经很有"生产味":
- TTL(过期时间):给 Redis 缓存设置了 10 分钟 TTL,避免数据永久不过期导致的脏数据问题;
- 内存上限:配置了 64MB 的 LRU 内存限制,防止缓存无限膨胀撑爆内存;
- 配置集中管理:通过
CacheConfig把缓存相关的 Bean 统一装配; - 数据自举:用
ApplicationRunner在启动时自动灌入种子天气数据,开箱即用。
项目还附带了清晰的分层文档,涵盖架构、缓存原理、注解、Bean 生命周期、API、运行方式以及 Redis 调试工具(redis-cli / Redis Insight),学习曲线非常平滑。
四、一条命令跑起来
部署体验堪称丝滑,借助 Docker Compose 把应用、数据库、Redis 全部编排好,只需:
docker compose up --build
跑起来后可以访问三个入口:
- 演示 UI:
http://localhost:8080,可视化展示缓存命中与未命中; - API / Swagger:
http:swagger-ui.html,直接调试接口; - Redis Insight:
http://localhost:5540,图形化查看缓存里的键值。
五、项目概况与适合谁
- 技术栈构成:Java 为主(57.7%),配合 JavaScript / HTML / CSS 写的演示前端,以及 Dockerfile 做容器化;
- 适合人群:想系统理解 Spring 缓存注解、Redis 集成、Docker Compose 本地编排的初中级开发者;
- 学习价值:不只是"能跑",而是把缓存的选型、配置、失效策略、调试手段串成了一条完整链路。
写在最后
性能优化里,缓存往往是性价比最高的一招,但也是最容易踩坑的一招——缓存穿透、缓存雪崩、脏数据、内存溢出,每一个都能让新手头疼。这个 Demo 用一个简单直观的天气场景,把"正确的缓存该长什么样"演示了一遍:读用 @Cacheable、改用 @CachePut、删用 @CacheEvict,再加上 TTL 和内存上限兜底。 想入门 Spring 缓存,从这里开始,准没错。
以上是根据该 GitHub 项目整理的技术博客,已按"项目简介 → 技术亮点 → 生产细节 → 快速上手 → 适用人群"的发布结构组织,可直接用于博客平台发布。如果你希望我把它导出为 Word / PDF 文件,或调整风格(更口语化 / 更偏教程向 / 补充代码示例),告诉我即可。

浙公网安备 33010602011771号