Redis 6.2.16 安装与配置(Linux)

Redis 是一个开源的内存数据结构存储系统,可用作数据库、缓存和消息代理。本文档将详细介绍如何在 Linux 系统上安装、启动和停止 Redis 6.2.16,并对 redis.conf 中的常用配置进行讲解,特别是端口号、密码、保护模式和监听 IP 等。

安装 Redis

按照以下步骤安装 Redis 6.2.16:

下载源代码

在终端中运行以下命令,将 Redis 6.2.16 源代码下载到 /home 目录:

cd /home
wget https://download.redis.io/releases/redis-6.2.16.tar.gz

解压文件

解压下载的压缩包:

tar -xzf redis-6.2.16.tar.gz

这将在 /home 目录下创建一个名为 redis-6.2.16 的文件夹。

编译 Redis

进入解压后的目录并编译 Redis:

cd /home/redis-6.2.16
make

可选:运行测试以验证构建是否正确:

make test

启动 Redis

您可以通过脚本或手动方式启动 Redis 服务。

使用脚本启动

以下是一个用于启动和停止 Redis 的脚本。将此脚本保存为 redis_control.sh,并赋予执行权限,然后使用 start 参数运行:

#!/bin/bash
# Redis启动和停止脚本

# Redis安装目录
REDIS_HOME=/home/redis-6.2.16
# Redis运行端口
REDIS_PORT=6379

# 启动Redis
start() {
  echo "Starting Redis..."
  cd $REDIS_HOME/src
  nohup ./redis-server ../redis.conf >/dev/null 2>&1 &
  echo "Redis is starting in the background."
}

# 停止Redis
stop() {
  echo "Stopping Redis running on port $REDIS_PORT..."
  PID=$(lsof -i :$REDIS_PORT | grep LISTEN | awk '{print $2}')

  if [ -z "$PID" ]; then
    echo "No Redis process found on port $REDIS_PORT."
  else
    kill -9 $PID
    echo "Redis process $PID stopped."
  fi
}

# 帮助信息
usage() {
  echo "Usage: $0 {start|stop}"
  exit 1
}

# 参数判断
case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  *)
    usage
    ;;
esac

使用脚本的步骤:

  1. 将脚本保存为 redis_control.sh

  2. 赋予执行权限:

    chmod +x redis_control.sh
    
  3. 启动 Redis:

    ./redis_control.sh start
    

使用脚本停止

使用上述脚本,运行:

./redis_control.sh stop

这将找到监听在 6379 端口的 Redis 进程并终止它。

Redis.conf 配置讲解

Redis 的配置文件 redis.conf 包含了许多配置项,下面重点讲解一些常用的配置,特别是与网络、安全性和性能相关的设置。

1. 网络配置

  • bind

    • 作用:指定 Redis 监听的 IP 地址。
    • 默认值bind 127.0.0.1 -::1(只监听本地 IPv4 和 IPv6 回环地址)
    • 示例bind 0.0.0.0
    • 说明:设置为 0.0.0.0 表示 Redis 监听所有可用网络接口,适用于需要远程访问的场景。但若未设置密码,这可能带来安全风险。
  • port

    • 作用:指定 Redis 监听的端口号。
    • 默认值6379
    • 示例port 6379
    • 说明:默认端口为 6379,可根据需要修改。
  • protected-mode

    • 作用:启用或禁用保护模式。
    • 默认值yes
    • 示例protected-mode no
    • 说明:启用时(yes),Redis 仅允许回环地址连接或在设置密码后允许远程连接。禁用(no)后允许任意 IP 连接,但需注意安全性。

2. 安全性配置

  • requirepass

    • 作用:设置 Redis 的访问密码。
    • 默认值:无(注释掉)
    • 示例requirepass your_password_here
  • rename-command

    • 作用:重命名或禁用危险命令。
    • 默认值:无
    • 示例rename-command CONFIG ""
    • 说明:可禁用如 CONFIGFLUSHALL 等命令以提高安全性。

3. 持久化配置

  • appendonly

    • 作用:启用或禁用 AOF(Append Only File)持久化。
    • 默认值no
    • 示例appendonly yes
    • 说明:启用后,每个写操作追加到 AOF 文件,提供更高数据安全性。
  • save

    • 作用:配置 RDB 快照保存策略。
    • 默认值
      save 900 1
      save 300 10
      save 60 10000
      
    • 说明:表示 900 秒内至少 1 个键修改、300 秒内至少 10 个键修改、60 秒内至少 10000 个键修改时保存快照。

4. 性能配置

  • maxmemory

    • 作用:设置 Redis 可使用的最大内存。
    • 默认值:无(不限制)
    • 示例maxmemory 2gb
    • 说明:达到限制时,根据 maxmemory-policy 策略回收内存。
  • maxmemory-policy

    • 作用:内存达到 maxmemory 时的回收策略。
    • 默认值noeviction
    • 示例maxmemory-policy allkeys-lru
    • 说明allkeys-lru 表示对所有键使用 LRU(最近最少使用)算法淘汰。

5. 其他常用配置

  • daemonize

    • 作用:是否以守护进程方式运行 Redis。
    • 默认值no
    • 示例daemonize yes
    • 说明:设置为 yes 时,Redis 在后台运行。
  • logfile

    • 作用:指定日志文件路径。
    • 默认值""(标准输出)
    • 示例logfile /var/log/redis.log
    • 说明:设置后,日志写入指定文件。
  • databases

    • 作用:设置 Redis 数据库数量。
    • 默认值16
    • 示例databases 16
    • 说明:默认有 16 个数据库,编号 0 到 15。

示例 redis.conf 文件

以下是一个生产环境 redis.conf 示例,包含上述常用配置的设置,密码是123456re,端口号是6379:

########## 基础 ##########
bind 0.0.0.0
protected-mode no
port 6379
requirepass 123456re
daemonize no
supervised systemd
pidfile /var/run/redis_6379.pid

########## 日志 ##########
loglevel notice
logfile ""
always-show-logo no

########## 连接 ##########
tcp-backlog 65536
timeout 0
tcp-keepalive 60
maxclients 50000

########## 内存 ##########
# 0 表示不限制,由上层监控触发报警 + OOM Killer 兜底
maxmemory 0
maxmemory-policy allkeys-lfu
maxmemory-samples 10
# 在线碎片整理
activedefrag yes
jemalloc-bg-thread yes

########## 异步删除 ##########
lazyfree-lazy-eviction yes
lazyfree-lazy-expire   yes
lazyfree-lazy-server-del yes
replica-lazy-flush yes
lazyfree-lazy-user-del yes

########## 过期与调度 ##########
active-expire-effort 4
hz 25
dynamic-hz yes

########## 线程 & 内核 ##########
io-threads 4
io-threads-do-reads no
disable-thp yes

########## 持久化 (仅 AOF) ##########
save ""                         # 关闭 RDB
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite yes
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 256mb
aof-use-rdb-preamble yes
rdb-save-incremental-fsync yes
aof-rewrite-incremental-fsync yes
stop-writes-on-bgsave-error no

########## 复制(如需) ##########
# repl-backlog-size 256mb
# repl-backlog-ttl 3600

########## 客户端缓冲 ##########
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 64mb 16mb 60

########## 其余保持默认 ##########