# 缓存模块 基于 Spring Cache 和 Redis 的缓存模块。 ## 引入依赖 ```xml com.mdframe.forge forge-starter-cache ``` ## 配置 ```yaml spring: redis: host: localhost port: 6379 password: database: 0 forge: cache: type: redis default-ttl: 3600 ``` ## 使用示例 ### 注解方式 ```java // 缓存查询结果 @Cacheable(value = "user", key = "#userId") public User getById(Long userId) { return userMapper.selectById(userId); } // 更新缓存 @CachePut(value = "user", key = "#user.userId") public User update(User user) { userMapper.updateById(user); return user; } // 删除缓存 @CacheEvict(value = "user", key = "#userId") public void delete(Long userId) { userMapper.deleteById(userId); } // 删除所有缓存 @CacheEvict(value = "user", allEntries = true) public void clearAll() { // ... } ``` ### 编程式缓存 ```java @Autowired private RedisTemplate redisTemplate; // 设置缓存 redisTemplate.opsForValue().set("user:1", user, 1, TimeUnit.HOURS); // 获取缓存 User user = (User) redisTemplate.opsForValue().get("user:1"); // 删除缓存 redisTemplate.delete("user:1"); // 批量删除 redisTemplate.delete(Arrays.asList("user:1", "user:2")); ``` ## 缓存注解 | 注解 | 说明 | |------|------| | @Cacheable | 缓存查询结果 | | @CachePut | 更新缓存 | | @CacheEvict | 删除缓存 | | @Caching | 组合多个缓存操作 | ## 缓存配置 ```java @Configuration public class CacheConfig { @Bean public RedisCacheManager cacheManager(RedisConnectionFactory factory) { RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig() .entryTtl(Duration.ofHours(1)) .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer())) .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer())); return RedisCacheManager.builder(factory) .cacheDefaults(config) .build(); } } ``` ## 注意事项 1. 缓存键建议使用统一的命名规范 2. 注意缓存穿透、击穿、雪崩问题 3. 更新数据时及时更新或删除缓存 4. 合理设置过期时间