Skip to main content
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 缓存的数据类型

系统默认缓存以下数据:

  1. 轮播图数据 (5分钟过期)

    • 接口: /Mini/getCarousel
    • 缓存键: carousel:list
  2. 热榜数据 (10分钟过期)

    • 接口: /Mini/getHotList
    • 缓存键: hot:list:{page}:{limit}
  3. 圈子列表 (5分钟过期)

    • 接口: /Mini/getAllSquare
    • 缓存键: square:list
  4. 文章列表 (5分钟过期)

    • 接口: /Mini/GetArticleBtmatter
    • 缓存键: article:list:{page}:{limit}

3.2 缓存更新策略

自动更新:

  • 缓存到期后自动失效
  • 下次请求时重新查询数据库并缓存

手动更新:

  • 数据修改时清除相关缓存
  • 管理后台操作时触发缓存更新

四、Redis安装

4.1 Windows安装

  1. 下载Redis for Windows:

  2. 解压并启动:

    cd C:\Redis
    redis-server.exe
  3. 测试连接:

    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连接失败怎么办?

检查:

  1. Redis服务是否启动: systemctl status redis
  2. 防火墙是否开放6379端口
  3. Redis配置文件中的bind地址
  4. 密码是否正确

Q2: 缓存不生效?

检查:

  1. spring.redis.enabled 是否为 true
  2. Redis连接是否正常
  3. @Cacheable注解是否正确配置
  4. 方法是否被Spring代理调用

Q3: 内存占用过高?

解决方案:

  1. 设置maxmemory限制
  2. 启用内存淘汰策略
  3. 减少缓存过期时间
  4. 清理不必要的缓存

Q4: 数据不一致?

解决方案:

  1. 更新数据时清除相关缓存
  2. 缩短缓存过期时间
  3. 使用消息队列同步缓存

九、总结

推荐配置

环境Redis配置说明
本地开发disabled简化环境,快速启动
测试环境enabled测试缓存功能
生产环境enabled提升性能

切换步骤

从无Redis切换到启用Redis:

  1. 安装Redis服务
  2. 修改 application.yml 配置
  3. 重启应用
  4. 验证缓存是否生效

从Redis切换到无Redis:

  1. 修改 spring.redis.enabled=false
  2. 重启应用
  3. 系统自动降级到数据库查询

建议: 开发环境可以不用Redis,生产环境强烈建议启用Redis以提升性能。