#!/bin/bash # Redis 内存优化配置脚本 # 用于快速配置 Redis 内存限制和淘汰策略 echo "==========================================" echo "Redis 内存优化配置脚本" echo "==========================================" # 检查 Redis 是否运行 if ! redis-cli ping > /dev/null 2>&1; then echo "错误: Redis 未运行或无法连接" echo "请先启动 Redis 服务" exit 1 fi echo "" echo "当前 Redis 配置:" redis-cli CONFIG GET maxmemory redis-cli CONFIG GET maxmemory-policy echo "" echo "当前内存使用情况:" redis-cli INFO memory | grep -E "used_memory_human|used_memory_peak_human|maxmemory_human" echo "" echo "当前数据库大小:" redis-cli DBSIZE echo "" echo "==========================================" echo "选择环境:" echo "1) 开发环境 (256MB)" echo "2) 生产环境 (1GB)" echo "3) 自定义" echo "4) 仅查看信息,不修改" echo "==========================================" read -p "请选择 [1-4]: " choice case $choice in 1) MAX_MEMORY="268435456" # 256MB in bytes MAX_MEMORY_STR="256mb" ;; 2) MAX_MEMORY="1073741824" # 1GB in bytes MAX_MEMORY_STR="1gb" ;; 3) read -p "请输入最大内存限制 (如: 512mb, 2gb): " MAX_MEMORY_STR ;; 4) echo "未进行任何修改" exit 0 ;; *) echo "无效选择" exit 1 ;; esac # 设置淘汰策略 EVICTION_POLICY="volatile-lru" echo "" echo "==========================================" echo "将设置以下配置:" echo "最大内存: $MAX_MEMORY_STR" echo "淘汰策略: $EVICTION_POLICY" echo "==========================================" read -p "确认执行? [y/N]: " confirm if [[ $confirm != "y" && $confirm != "Y" ]]; then echo "已取消" exit 0 fi # 执行配置 echo "" echo "正在配置 Redis..." if [ -n "$MAX_MEMORY_STR" ]; then redis-cli CONFIG SET maxmemory "$MAX_MEMORY_STR" echo "✓ 已设置 maxmemory = $MAX_MEMORY_STR" fi redis-cli CONFIG SET maxmemory-policy "$EVICTION_POLICY" echo "✓ 已设置 maxmemory-policy = $EVICTION_POLICY" # 可选: 保存到配置文件 (需要权限) echo "" read -p "是否保存到 Redis 配置文件? (需要写权限) [y/N]: " save_config if [[ $save_config == "y" || $save_config == "Y" ]]; then redis-cli CONFIG REWRITE if [ $? -eq 0 ]; then echo "✓ 配置已保存到 redis.conf" else echo "✗ 保存失败,请检查权限或手动修改 redis.conf" fi fi echo "" echo "==========================================" echo "配置完成!" echo "==========================================" echo "" echo "新配置:" redis-cli CONFIG GET maxmemory redis-cli CONFIG GET maxmemory-policy echo "" echo "建议操作:" echo "1. 监控内存使用: redis-cli INFO memory" echo "2. 查看 key 数量: redis-cli DBSIZE" echo "3. 查看大 key: redis-cli --bigkeys" echo "4. 查看应用日志以确认系统正常运行" echo "" echo "注意: 配置立即生效,无需重启 Redis"