wbase-redis
大约 3 分钟
wbase-redis
Redis 缓存模块 - 提供 Redis 操作、缓存管理、自定义过期时间等能力
📦 Maven 依赖
<dependency>
<groupId>com.wzhcode.wbase</groupId>
<artifactId>wbase-redis</artifactId>
<version>1.0.0</version>
</dependency>📁 目录结构
wbase-redis/src/main/java/com/wzhcode/wbase/redis/
│
├── 📂 config/ # 自动配置类
│ ├── WBaseCacheAutoConfiguration.java # Cache 自动配置
│ ├── WBaseCacheProperties.java # Cache 配置属性
│ └── WBaseRedisAutoConfiguration.java # Redis 自动配置
│
└── 📂 core/ # 核心类
└── TimeoutRedisCacheManager.java # 支持自定义过期时间的缓存管理器📑 目录
⚙️ 自动配置
位置:
com.wzhcode.wbase.redis.config
WBaseRedisAutoConfiguration
Redis 基础配置,提供 RedisTemplate Bean:
- 使用
String序列化 KEY - 使用
JSON(Jackson)序列化 VALUE - 支持
LocalDateTime等 Java 8 时间类型序列化
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(factory);
// KEY 使用 String 序列化
template.setKeySerializer(RedisSerializer.string());
template.setHashKeySerializer(RedisSerializer.string());
// VALUE 使用 JSON 序列化
template.setValueSerializer(buildRedisSerializer());
template.setHashValueSerializer(buildRedisSerializer());
return template;
}WBaseCacheAutoConfiguration
Spring Cache 配置,基于 Redis 实现:
- 使用单冒号
:作为 KEY 分隔符(避免 Redis Desktop Manager 显示问题) - 支持自定义 KEY 前缀
- 集成
TimeoutRedisCacheManager支持动态过期时间
⏱️ 自定义缓存过期时间
位置:
com.wzhcode.wbase.redis.core.TimeoutRedisCacheManager
功能说明
在 @Cacheable 的 cacheNames 中使用 # 分隔符指定过期时间:
格式: cacheName#ttl支持的时间单位
| 单位 | 说明 | 示例 |
|---|---|---|
d | 天 | user#7d = 7天 |
h | 小时 | user#24h = 24小时 |
m | 分钟 | user#30m = 30分钟 |
s | 秒 | user#60s = 60秒 |
| 无 | 默认秒 | user#3600 = 3600秒 |
📝 使用示例
// 缓存 1 天
@Cacheable(cacheNames = "user#1d", key = "#id")
public User getById(Long id) {
return userMapper.selectById(id);
}
// 缓存 30 分钟
@Cacheable(cacheNames = "config#30m", key = "#key")
public String getConfig(String key) {
return configMapper.selectByKey(key);
}
// 缓存 2 小时,带 key 前缀
@Cacheable(cacheNames = "product#2h:detail", key = "#id")
public Product getProduct(Long id) {
return productMapper.selectById(id);
}
// 默认过期时间(使用配置文件中的 time-to-live)
@Cacheable(cacheNames = "dict", key = "#type")
public List<DictData> getDictByType(String type) {
return dictMapper.selectByType(type);
}🔧 配置属性
application.yml 配置
# Spring Cache 配置
spring:
cache:
type: redis
redis:
time-to-live: 1h # 默认过期时间
key-prefix: "myapp:" # KEY 前缀
cache-null-values: true # 是否缓存 null 值
use-key-prefix: true # 是否使用 KEY 前缀
# Redisson 配置
spring:
data:
redis:
host: localhost
port: 6379
password:
database: 0
# WBase Cache 配置
wbase:
cache:
redis-scan-batch-size: 30 # Redis SCAN 命令每次返回数量WBaseCacheProperties
| 属性 | 说明 | 默认值 |
|---|---|---|
wbase.cache.redis-scan-batch-size | Redis SCAN 批量大小 | 30 |
📚 主要依赖
| 依赖 | 用途 | 版本管理 |
|---|---|---|
| wbase-core | 基础核心模块 | ✅ |
| Redisson | Redis 客户端 | ✅ |
| Spring Boot Starter Cache | 缓存抽象 | ✅ |
| Jackson Datatype JSR310 | Java 8 时间序列化 | ✅ |
版本由
wbase-dependencies统一管理
💡 最佳实践
| 场景 | 推荐做法 |
|---|---|
| 🔑 KEY 设计 | 使用有意义的前缀,如 user:info:1001 |
| ⏱️ 过期时间 | 根据数据更新频率设置,热点数据可设置较短时间 |
| 🚫 缓存穿透 | 开启 cache-null-values 缓存空值 |
| 📊 序列化 | 默认使用 JSON,便于调试和跨语言 |
| 🔄 缓存更新 | 配合 @CacheEvict 或 @CachePut 使用 |
| 🎯 动态过期 | 使用 cacheName#ttl 格式指定不同过期时间 |