121 lines
3.0 KiB
Bash
121 lines
3.0 KiB
Bash
#!/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"
|