Version: 中文
Redis可选配置指南
概述
IceCMS-Pro支持Redis缓存,但Redis不是必需的。系统会自动检测Redis是否可用:
- Redis可用: 使用Redis缓存提升性能
- Redis不可用: 降级到直接数据库查询,功能正常运行
一、配置方式
1.1 禁用Redis (默认模式)
在 application.yml 中不配置Redis,或显式禁用:
spring:
redis:
enabled: false # 禁用Redis(默认)
此时系统正常运行,所有查询直接访问数据库,无需安装Redis。
1.2 启用Redis
在 application.yml 中配置:
spring:
redis:
enabled: true # 启用Redis
host: localhost
port: 6379
password: # 如果有密码则填写
database: 0
lettuce:
pool:
max-active: 8
max-wait: -1ms
max-idle: 8
min-idle: 0
timeout: 5000ms
此时系统会使用Redis缓存,提升性能。
二、性能对比
无Redis模式
优点:
- 部署简单,无需额外服务
- 维护成本低
- 适合小型项目和开发环境
缺点:
- 每次请求都查询数据库
- 并发性能较低
- 数据库压力较大
适用场景:
- 开发环境
- 测试环境
- 访问量较小的项目
启用Redis
优点:
- 大幅提升查询速度
- 减轻数据库压力
- 提高并发处理能力
- 支持数据过期自动清理
缺点:
- 需要部署Redis服务
- 增加运维复杂度
- 占用额外内存资源
适用场景:
- 生产环境
- 高并发项目
- 数据访问频繁的系统
三、缓存策略
3.1 缓存的数据类型
系统默认缓存以下数据:
轮播图数据 (5分钟过期)
- 接口:
/Mini/getCarousel - 缓存键:
carousel:list
- 接口:
热榜数据 (10分钟过期)
- 接口:
/Mini/getHotList - 缓存键:
hot:list:{page}:{limit}
- 接口:
圈子列表 (5分钟过期)
- 接口:
/Mini/getAllSquare - 缓存键:
square:list
- 接口:
文章列表 (5分钟过期)
- 接口:
/Mini/GetArticleBtmatter - 缓存键:
article:list:{page}:{limit}
- 接口:
3.2 缓存更新策略
自动更新:
- 缓存到期后自动失效
- 下次请求时重新查询数据库并缓存
手动更新:
- 数据修改时清除相关缓存
- 管理后台操作时触发缓存更新
四、Redis安装
4.1 Windows安装
下载Redis for Windows:
解压并启动:
cd C:\Redis
redis-server.exe测试连接:
redis-cli.exe
ping
4.2 Linux安装
Ubuntu/Debian:
sudo apt-get update
sudo apt-get install redis-server
sudo systemctl start redis-server
sudo systemctl enable redis-server
CentOS/RHEL:
sudo yum install redis
sudo systemctl start redis
sudo systemctl enable redis
4.3 Docker安装
# 启动Redis容器
docker run -d \
--name redis \
-p 6379:6379 \
redis:latest
# 查看日志
docker logs redis
# 进入Redis CLI
docker exec -it redis redis-cli
五、配置示例
5.1 本地开发环境
spring:
redis:
enabled: false # 不使用Redis,简化开发环境
5.2 测试环境
spring:
redis:
enabled: true
host: localhost
port: 6379
database: 0
5.3 生产环境
spring:
redis:
enabled: true
host: redis.example.com
port: 6379
password: ${REDIS_PASSWORD} # 从环境变量读取密码
database: 0
lettuce:
pool:
max-active: 20
max-wait: -1ms
max-idle: 10
min-idle: 5
timeout: 10000ms
六、监控和维护
6.1 查看缓存状态
# 连接Redis
redis-cli
# 查看所有键
KEYS *
# 查看特定缓存
GET carousel:list
# 查看键的过期时间
TTL carousel:list
# 查看内存使用
INFO memory
6.2 清理缓存
# 清除所有缓存
redis-cli FLUSHALL
# 清除特定缓存
redis-cli DEL carousel:list
# 清除匹配的缓存
redis-cli KEYS "article:*" | xargs redis-cli DEL
七、性能优化建议
7.1 合理设置过期时间
// 高频访问,短过期时间
@Cacheable(value = "hot:list", key = "#page + ':' + #limit")
@CacheEvict(allEntries = true, beforeInvocation = true)
// 低频访问,长过期时间
@Cacheable(value = "static:content", key = "#id")
7.2 避免缓存穿透
// 缓存空结果,防止穿透
if (result == null) {
// 缓存空对象,设置较短过期时间
redisTemplate.opsForValue().set(key, "", 60, TimeUnit.SECONDS);
return null;
}
7.3 预热缓存
// 系统启动时预加载热门数据
@PostConstruct
public void init() {
if (redisEnabled) {
loadCarouselCache();
loadHotListCache();
}
}
八、常见问题
Q1: Redis连接失败怎么办?
检查:
- Redis服务是否启动:
systemctl status redis - 防火墙是否开放6379端口
- Redis配置文件中的bind地址
- 密码是否正确
Q2: 缓存不生效?
检查:
spring.redis.enabled是否为true- Redis连接是否正常
- @Cacheable注解是否正确配置
- 方法是否被Spring代理调用
Q3: 内存占用过高?
解决方案:
- 设置maxmemory限制
- 启用内存淘汰策略
- 减少缓存过期时间
- 清理不必要的缓存
Q4: 数据不一致?
解决方案:
- 更新数据时清除相关缓存
- 缩短缓存过期时间
- 使用消息队列同步缓存
九、总结
推荐配置
| 环境 | Redis配置 | 说明 |
|---|---|---|
| 本地开发 | disabled | 简化环境,快速启动 |
| 测试环境 | enabled | 测试缓存功能 |
| 生产环境 | enabled | 提升性能 |
切换步骤
从无Redis切换到启用Redis:
- 安装Redis服务
- 修改
application.yml配置 - 重启应用
- 验证缓存是否生效
从Redis切换到无Redis:
- 修改
spring.redis.enabled=false - 重启应用
- 系统自动降级到数据库查询
建议: 开发环境可以不用Redis,生产环境强烈建议启用Redis以提升性能。
Was this helpful?