Skip to content

Redis 配置

本文档介绍如何配置Redis缓存服务以支持学习追踪系统。

📋 系统要求

  • Redis: 6.0+
  • 内存: 1GB RAM (推荐2GB+)

🚀 安装Redis

Ubuntu/Debian

bash
sudo apt update
sudo apt install redis-server
sudo systemctl start redis-server
sudo systemctl enable redis-server

CentOS/RHEL

bash
sudo yum install redis
sudo systemctl start redis
sudo systemctl enable redis

macOS

bash
brew install redis
brew services start redis

⚙️ Redis配置

主要配置文件 (redis.conf)

conf
# 网络设置
bind 127.0.0.1
protected-mode yes
port 6379

# 安全设置
requirepass your_redis_password

# 内存设置
maxmemory 512mb
maxmemory-policy allkeys-lru

# 持久化设置
save 900 1
save 300 10
save 60 10000
appendonly yes
appendfilename "appendonly.aof"

🔧 项目环境变量

.env 文件中添加:

bash
# Redis配置
REDIS_HOST=localhost
REDIS_PORT=6379
REDIS_PASSWORD=your_redis_password
REDIS_DB=0

📊 缓存策略

缓存TTL配置

javascript
const CACHE_TTL = {
  USER: 3600,           // 用户信息 1小时
  DASHBOARD: 300,       // 仪表板数据 5分钟
  SESSIONS: 1800,       // 学习记录 30分钟
  PROJECTS: 1800,       // 项目列表 30分钟
  ANALYTICS: 600,       // 分析数据 10分钟
  BLACKLIST: 86400,     // Token黑名单 24小时
  LOGIN_ATTEMPTS: 900,  // 登录尝试 15分钟
  SYSTEM_INFO: 300,     // 系统信息 5分钟
  NOTIFICATIONS: 1800   // 通知数据 30分钟
};

缓存键前缀

javascript
const CACHE_KEYS = {
  USER: (id) => `user:${id}`,
  DASHBOARD: (userId) => `dashboard:${userId}`,
  SESSIONS: (userId) => `sessions:${userId}`,
  PROJECTS: (userId) => `projects:${userId}`,
  ANALYTICS: (userId) => `analytics:${userId}`,
  BLACKLIST: 'blacklisted_tokens',
  LOGIN_ATTEMPTS: (ip) => `login_attempts:${ip}`,
  SYSTEM_INFO: 'system_info',
  NOTIFICATIONS: (userId) => `notifications:${userId}`
};

🔍 性能优化

内存优化

conf
maxmemory 1gb
maxmemory-policy allkeys-lru
maxmemory-samples 5

网络优化

conf
tcp-keepalive 300
tcp-backlog 511
tcp-nodelay yes

📈 监控和维护

性能监控

bash
# 查看Redis信息
redis-cli info

# 查看内存使用
redis-cli info memory

# 查看连接数
redis-cli info clients

慢查询监控

conf
slowlog-log-slower-than 10000
slowlog-max-len 128
bash
# 查看慢查询
redis-cli slowlog get 10

💾 备份和恢复

自动备份脚本

bash
#!/bin/bash
BACKUP_DIR="/var/backups/redis"
DATE=$(date +%Y%m%d_%H%M%S)

mkdir -p $BACKUP_DIR
redis-cli BGSAVE

# 等待备份完成
while [ "$(redis-cli info persistence | grep rdb_bgsave_in_progress | cut -d: -f2)" != "0" ]; do
    sleep 1
done

cp /var/lib/redis/dump.rdb $BACKUP_DIR/redis_${DATE}.rdb
gzip $BACKUP_DIR/redis_${DATE}.rdb
find $BACKUP_DIR -name "*.rdb.gz" -mtime +7 -delete

恢复数据

bash
sudo systemctl stop redis-server
sudo cp backup_file.rdb /var/lib/redis/dump.rdb
sudo systemctl start redis-server

🔐 安全配置

网络安全

conf
bind 127.0.0.1
protected-mode yes
requirepass your_strong_password

访问控制

bash
sudo useradd -r -s /bin/false redis
sudo chown redis:redis /var/lib/redis
sudo chown redis:redis /var/log/redis

🚨 故障排除

常见问题

连接被拒绝

bash
sudo systemctl status redis-server
netstat -tlnp | grep 6379
redis-cli ping

内存不足

bash
redis-cli info memory
redis-cli --bigkeys

性能问题

bash
redis-cli slowlog get 10
redis-cli info stats

日志分析

bash
sudo tail -f /var/log/redis/redis-server.log
sudo journalctl -u redis-server -f

📚 相关资源

Released under the MIT License.