# task6 **Repository Path**: lan-chuling/task6 ## Basic Information - **Project Name**: task6 - **Description**: springboot 本地缓存 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2026-04-18 - **Last Updated**: 2026-04-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Spring Boot + Caffeine 缓存示例项目 ## 项目简介 本项目使用 Spring Boot 3.1.1 + Caffeine 3.1.1 实现用户信息查询的缓存,观察缓存命中与失效行为。 ## 技术栈 - Spring Boot 3.1.1 - Caffeine 3.1.1 - H2 数据库 - Spring Data JPA - Spring Web ## 功能特性 1. **用户管理**:提供用户查询和创建接口 2. **本地缓存**:使用 Caffeine 实现本地缓存 3. **缓存监控**:提供缓存统计信息和清除缓存的接口 4. **异常处理**:统一的异常处理机制 5. **日志记录**:详细的日志记录,便于观察缓存使用情况 ## 缓存配置 - 缓存过期时间:10秒 - 缓存最大容量:100条 - 缓存统计:记录缓存命中率、未命中率等统计信息 ## API 文档 ### 用户相关接口 #### 查询用户 - **URL**: `/api/users/{id}` - **方法**: GET - **参数**: id (用户ID) - **响应**: - 成功: `{"id": 1, "username": "testuser", "email": "test@example.com"}` - 失败: `{"message": "用户不存在", "code": "USER_NOT_FOUND"}` #### 创建用户 - **URL**: `/api/users` - **方法**: POST - **参数**: `{"username": "testuser", "email": "test@example.com"}` - **响应**: - 成功: `{"id": 1, "username": "testuser", "email": "test@example.com"}` - 失败: `{"message": "创建用户失败", "code": "INTERNAL_ERROR"}` ### 缓存监控接口 #### 获取缓存统计信息 - **URL**: `/api/cache/stats` - **方法**: GET - **响应**: ```json { "users": { "hitRate": 0.5, "missRate": 0.5, "requestCount": 10, "hitCount": 5, "missCount": 5, "evictionCount": 0, "size": 5 } } ``` #### 清除缓存 - **URL**: `/api/cache/clear` - **方法**: GET - **响应**: ```json { "message": "缓存已清除", "status": "success" } ``` ## 项目结构 ``` src/ ├── main/ │ ├── java/com/example/task6/ │ │ ├── config/ # 配置类 │ │ │ └── CacheConfig.java # 缓存配置 │ │ ├── controller/ # 控制器 │ │ │ ├── UserController.java # 用户管理接口 │ │ │ └── CacheStatsController.java # 缓存监控接口 │ │ ├── entity/ # 实体类 │ │ │ └── User.java # 用户实体 │ │ ├── repository/ # 数据访问 │ │ │ └── UserRepository.java # 用户数据访问 │ │ ├── service/ # 服务层 │ │ │ └── UserService.java # 用户服务 │ │ └── Task6Application.java # 应用入口 │ └── resources/ │ └── application.yml # 应用配置 └── test/ └── java/com/example/task6/ └── CacheIntegrationTest.java # 缓存集成测试 ``` ## 运行项目 1. **编译项目**: ```bash mvn clean install ``` 2. **运行项目**: ```bash mvn spring-boot:run ``` 3. **访问 H2 控制台**: - URL: http://localhost:8080/h2-console - 数据库 URL: jdbc:h2:mem:task6db - 用户名: sa - 密码: (空) 4. **测试 API**: - 创建用户: POST http://localhost:8080/api/users - 查询用户: GET http://localhost:8080/api/users/{id} - 获取缓存统计: GET http://localhost:8080/api/cache/stats - 清除缓存: GET http://localhost:8080/api/cache/clear ## 测试缓存行为 运行测试用例: ```bash mvn test ``` 测试用例包括: 1. **testCacheHitAndMiss**:测试缓存命中与失效行为 2. **testCacheCapacity**:测试缓存容量限制 3. **testMultipleUsersCache**:测试多个用户的缓存行为 ## 日志观察 通过查看控制台日志,可以观察到缓存的使用情况: - 缓存未命中:`未命中缓存,从数据库查询用户: id={}` - 缓存命中:无上述日志 - 缓存失效:`缓存移除: key={}, cause={}` - 缓存统计:`缓存统计: 命中率={}, 未命中率={}, 总请求数={}, 缓存大小={}` ## 注意事项 1. **缓存过期时间**:设置为 10 秒,便于观察缓存失效行为 2. **缓存容量**:设置为 100 条,可根据实际需求调整 3. **H2 数据库**:使用内存数据库,重启后数据会丢失 4. **日志级别**:开发环境设置为 debug,生产环境建议设置为 info ## 扩展建议 1. **缓存预热**:在应用启动时预热缓存 2. **缓存失效策略**:根据业务需求调整缓存失效策略 3. **分布式缓存**:对于分布式系统,考虑使用 Redis 等分布式缓存 4. **缓存监控**:集成 Prometheus 等监控系统,实现缓存指标的监控