暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

redis 安装

techno 2026-07-02
125

redis 单机安装

一、环境准备

1.1 操作系统要求

Redis 支持主流 Linux 发行版,推荐:

  • Ubuntu 20.04 / 22.04 LTS
  • CentOS 7 / 8 / Rocky Linux 8 / 9
  • Debian 11 / 12

The latest version of Redis Open Source has been tested on the following platforms:

  • Ubuntu 22.04 (Jammy Jellyfish), 24.04 (Noble Numbat), and 26.04 (Resolute Raccoon).
  • Rocky Linux 8.10, 9.7, and 10.1.
  • AlmaLinux 8.10, 9.7, and 10.1.
  • Debian 12.13 (Bookworm) and Debian 13.4 (Trixie).
  • Alpine 3.23.
  • macOS 14.8.4 (Sonoma), 15.7.4 (Sequoia), and 26.3 (Tahoe) - for both Intel and ARM processors.

1.2 创建redis用户

# redis 用户 # 一般systemd 服务使用 不登录 redis用户 sudo useradd -r -s /sbin/nologin redis # redis 用户 # 手动管理服务 useradd -s /bin/bash redis

1.3 安装编译依赖

Ubuntu / Debian:

sudo apt update sudo apt install -y build-essential tcl pkg-config

CentOS / Rocky Linux:

sudo yum groupinstall -y "Development Tools" sudo yum install -y tcl

Development Tools
安装系统开发工具组套件,一次性装好编译源码必备全套工具。
包含软件 gcc、g++、make、cmake、git、automake、autoconf、gcc-c++、patch、libtool 等编译、构建工具。
groupinstall:安装软件软件组

💡 tcl 用于运行 Redis 自带的测试套件;build-essential / Development Tools 提供 gcc、make 等编译工具。


1.4 修改系统 limits

文件描述符限制由 Linux 系统的 ulimit 机制控制,核心目标是让 Redis 进程的「最大打开文件数」大于 maxclients(10000),避免出现 Too many open files 报错、新连接被拒绝

修改系统 limits 配置文件

# 修改前检查 su -s /bin/bash redis -c "ulimit -n" cat /etc/security/limits.conf | grep -v '#'
# 新创建的会话生效 # soft:软限制,用户登录后默认生效的数值 # hard:硬限制,用户可自行上调的最大上限 echo "redis soft nofile 65535" >> /etc/security/limits.conf echo "redis hard nofile 65535" >> /etc/security/limits.conf

验证

su -s /bin/bash redis -c "ulimit -n"

启动后验证

cat /proc/$(pidof redis-server)/limits | grep "Max open files"

1.5 关闭透明大页

透明大页可能导致内存分配延迟和性能抖动,数据库、缓存中间件等低延迟场景建议关闭。

临时关闭

(无需重启,立即生效,重启后失效)

通用配置

(RHEL 7+/CentOS 7+/Ubuntu/Debian/SUSE 等)

if test -f /sys/kernel/mm/transparent_hugepage/enabled; then echo never > /sys/kernel/mm/transparent_hugepage/enabled fi if test -f /sys/kernel/mm/transparent_hugepage/defrag; then echo never > /sys/kernel/mm/transparent_hugepage/defrag fi
RHEL 6 / CentOS 6 专属配置
echo never > /sys/kernel/mm/redhat_transparent_hugepage/enabled echo never > /sys/kernel/mm/redhat_transparent_hugepage/defrag
验证状态
# 查看主开关状态,方括号中标注的为当前生效值 cat /sys/kernel/mm/transparent_hugepage/enabled # 查看碎片整理开关状态 cat /sys/kernel/mm/transparent_hugepage/defrag
# 预期输出 always madvise [never] always defer defer+madvise madvise [never]

注意:临时关闭仅对新申请的内存生效,已运行的进程需重启才能完全脱离大页。


永久关闭

GRUB 内核启动参数

(生产推荐,最彻底,必须重启生效)

内核启动时直接禁用,全局所有进程均不生效,无兼容性风险。

  1. 编辑配置文件
vi /etc/default/grub
  1. 追加内核参数
  • CentOS/RHEL 系列:在 GRUB_CMDLINE_LINUX 行的引号内追加
    GRUB_CMDLINE_LINUX="... transparent_hugepage=never"
    
  • Ubuntu/Debian 系列:在 GRUB_CMDLINE_LINUX_DEFAULT 行的引号内追加
    GRUB_CMDLINE_LINUX_DEFAULT="... transparent_hugepage=never"
    
  • CentOS 6 / RHEL 6:直接编辑 /boot/grub/grub.conf,在 kernel 启动行末尾追加 transparent_hugepage=never
  1. 重新生成 GRUB 配置
    先确认系统启动模式:
# 有输出为 UEFI,无输出为 BIOS ls /sys/firmware/efi

根据启动模式执行对应命令:

# 先检查对应文件存在 ll /boot/grub2/grub.cfg ll /boot/efi/EFI/*/grub.cfg # ====== CentOS/RHEL 系列 ====== # BIOS 传统启动 grub2-mkconfig -o /boot/grub2/grub.cfg # UEFI 启动(CentOS) grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg # UEFI 启动(RHEL) grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg # ====== Ubuntu/Debian 系列 ====== update-grub

验证配置,次配置保证重启生效

grep transparent_hugepage /boot/grub2/grub.cfg grep transparent_hugepage /boot/efi/EFI/*/grub.cfg

重启验证

# reboot

1.6 内核参数

内存超量提交设置

解决 Redis 持久化 fork 失败、jemalloc 内存映射暴涨问题

# 默认 0 cat /proc/sys/vm/overcommit_memory echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf sysctl -p # 预期输出:1 cat /proc/sys/vm/overcommit_memory

fork 瞬间,内核层面看到的是「子进程申请了和父进程一样大的内存」,但实际上绝大多数内存是共享的,真实物理内存占用远不到两倍

vm.overcommit_memory 是控制内核超量提交策略的开关

取值 策略名称 核心规则
0 启发式超量提交(系统默认) 内核自行判断,明显不合理的超大内存申请会拒绝,其余允许;内存紧张时也可能拒绝
1 永远允许超量提交 无论申请多少内存都直接通过,完全不做校验
2 严格不超量 申请的总虚拟内存不得超过 物理内存 * overcommit_ratio + Swap,超过直接拒绝申请

最大内存映射数

提升进程可拥有的内存映射上限,避免大内存实例、jemalloc 碎片化导致的分配失败

# 默认 cat /proc/sys/vm/max_map_count echo "vm.max_map_count = 262144" >> /etc/sysctl.conf sysctl -p # 预期输出:262144 cat /proc/sys/vm/max_map_count

TCP 全连接队列上限

对齐 Redis tcp-backlog 4096 配置,支撑高并发新建连接

# linux 内核5.4及之后 默认 4090 cat /proc/sys/net/core/somaxconn echo "net.core.somaxconn = 4096" >> /etc/sysctl.conf sysctl -p # 预期输出:4096 cat /proc/sys/net/core/somaxconn

二、源码编译安装(推荐方式)

源码安装可以让你使用最新版本,并对编译参数进行精细控制,是 生产环境推荐 的安装方式。

2.1 下载 Redis 源码

# 进入工作目录 cd /usr/local/src # 下载 Redis 7.4.9(请根据官网最新版本调整) # Note: Visit https://download.redis.io/releases/ for the latest version sudo wget --no-check-certificate https://download.redis.io/releases/redis-7.4.9.tar.gz # 解压 sudo tar xzf redis-7.4.9.tar.gz cd redis-7.4.9

2.2 编译与安装

# 编译(-j 参数可指定并行编译线程数,加快速度)| nproc 打印当前可用的**CPU 逻辑核心数**,常用于编译时指定并发任务数(`make -j$(nproc)`) sudo make -j$(nproc) # 运行测试(可选,耗时较长) # 编译完 Redis 源码后,执行全套自动化单元测试,验证编译出的 redis-server、redis-cli 等二进制程序是否正常、无内存泄漏、基础命令逻辑是否正确。 # 自动跑数百条测试用例(基于 tcl 脚本,所以之前要装`tcl`) # 检测底层数据结构、持久化、网络、事务、集群基础功能 bug # 输出测试结果:全部 pass 代表编译产物可用;报错则说明编译环境 / 源码有问题 sudo make test # 默认安装到 /usr/local/bin sudo make install # 指定安装目录 /usr/local/redis -> /usr/local/redis/bin sudo make PREFIX=/usr/local/redis install # 配置 环境变量 | /etc/profile 系统级环境变量 echo "export PATH=\$PATH:/usr/local/redis/bin" >> /etc/profile source /etc/profile

安装完成后,以下可执行文件会被放到 /usr/local/bin/

文件 说明
redis-server Redis 服务端
redis-cli Redis 命令行客户端
redis-benchmark 性能基准测试工具
redis-check-aof AOF 文件修复工具
redis-check-rdb RDB 文件修复工具
redis-sentinel Redis Sentinel 哨兵

验证安装:

redis-server --version # 输出示例:Redis server v=7.4.9 sha=00000000:0 malloc=jemalloc-5.3.0 bits=64 redis-cli --version # 输出示例:redis-cli 7.4.9

2.3 使用 install_server.sh(可选)

Redis 源码中自带了一个安装脚本,可以交互式完成配置:

cd /usr/local/src/redis-7.4.9 sudo ./utils/install_server.sh

该脚本会引导你设置:

  • 监听端口(默认 6379)
  • 配置文件路径
  • 日志文件路径
  • 数据目录
  • 并自动注册为 systemd 服务

四、目录

手动创建目录:

# linux 系统规范 sudo mkdir -p /etc/redis /var/lib/redis /var/log/redis sudo cp /usr/local/src/redis-7.4.9/redis.conf /etc/redis/redis.conf sudo chown -R redis:redis /var/lib/redis /var/log/redis
# 自定义 方便统一管理 sudo mkdir -p /redis-6379/{conf,data,log} sudo cp /usr/local/src/redis-7.4.9/redis.conf /redis-6379/conf/redis.conf sudo cat /usr/local/src/redis-7.4.9/redis.conf | grep -v '#' | grep -v '^$' > /redis-6379/conf/redis.conf sudo chown -R redis:redis /redis-6379

五、redis.conf 核心配置详解

Redis 的所有行为几乎都可以通过配置文件控制。以下是最重要的配置项:

5.1 网络配置

### 绑定地址 - 代表**排除不监听** # 仅本机 IPv4,关闭 IPv6 bind 127.0.0.1 -::1 # 本机同时支持 IPv4 + IPv6 bind 127.0.0.1 ::1 # 允许所有网卡、任意 IP 外网访问(生产务必加密码) bind 0.0.0.0 -::1 # 只监听指定本机+内网 IPv4,禁用 IPv6 (推荐) bind 127.0.0.1 192.168.1.100 -::1 ### # 监听端口 port 6379 # 保护模式——当没有设置密码 只接受本地地址 # 3.2 ~ 6.x:没显式配 bind + 没密码 → 触发拦截 # https://github.com/redis/redis/blob/6.2/redis.conf # 7.0+:没密码 → 触发拦截(bind 不影响) # https://github.com/redis/redis/blob/7.4.9/redis.conf # When protected mode is on and the default user has no password, the server # only accepts local connections from the IPv4 address (127.0.0.1), IPv6 address # (::1) or Unix domain sockets. protected-mode yes # TCP backlog 队列长度 # Accept 队列 | 配置的 **TCP 全连接队列(Accept 队列)的最大长度**,直接作用于 TCP 三次握手完成后的连接排队环节 # 取低值 ( tcp-backlog /proc/sys/net/core/somaxconn ) | 配置 echo "net.core.somaxconn = 4096" >> /etc/sysctl.conf tcp-backlog 4096 # 空闲 5 分钟主动断开,回收长期不用的连接 | 客户端空闲超时(秒),0 表示不超时 timeout 300 # 空闲 5 分钟后启动 TCP 保活,检测异常死连接 tcp-keepalive 300
# network confg bind 127.0.0.1 192.168.125.128 -::1 port 6379 protected-mode yes tcp-backlog 4096 timeout 300 tcp-keepalive 300

bind 参数说明:

  • bind 127.0.0.1:只允许本机访问
  • bind 0.0.0.0:允许所有网络接口访问(生产环境需配合密码和防火墙)
  • bind 127.0.0.1 192.168.1.100:允许多个指定地址

5.2 通用配置

# 是否以守护进程方式运行 daemonize yes # PID 文件路径 pidfile /var/run/redis/redis-server.pid pidfile /redis-6379/redis-server.pid # 日志级别:debug / verbose / notice / warning loglevel notice # 日志文件路径(空字符串表示输出到标准输出) logfile /var/log/redis/redis.log logfile /redis-6379/log/redis.log # 数据库数量 默认16 表示16个库 (使用上 select 0 ~ 15,共 16 个) # 多数据库的设计容易导致命名空间混乱,且在集群模式下不被支持。更好的做法是通过不同的Key前缀来隔离数据。 # 不支持在线(运行时)动态增加 / 修改 | 注意平衡扩展性 databases 16
# GENERAL daemonize yes pidfile /redis-6379/redis-server.pid loglevel notice logfile /redis-6379/log/redis.log databases 16

日志级别对照:

  • debug:最详细,开发调试用
  • verbose:较详细
  • notice:生产环境推荐
  • warning:只记录警告和错误

5.3 资源管理

# 最大内存限制(单位支持 k/m/g) # 当内存使用达到此限制时,Redis会根据`maxmemory-policy`策略开始驱逐数据 maxmemory 256mb # 最大客户端连接数 # 根据服务器内存和预期负载设置。每个客户端连接大约消耗10KB内存 maxclients 10000 # 内存淘汰策略 maxmemory-policy noeviction # 关闭透明大页 | disable-thp yes # LRU, LFU and minimal TTL algorithms的采样数 # Redis在执行LRU等算法时,并不会检查所有key,而是随机采样一部分key进行比较。此参数设置采样数量 # 值越大,算法越精确,但CPU消耗越高 maxmemory-samples 10 # 开启后会主动调整进程的 OOM 评分,让内核优先杀其他进程,尽量保住 Redis,提升单机稳定性。 # - 0:主 Redis 实例,分值最低,内存爆满最后杀 # - 200:从库实例,内存不足优先干掉从库 # - 800:RDB/AOF 重写等 fork 出来的后台子进程,最先被杀死,保护主业务进程 oom-score-adj yes oom-score-adj-values 0 200 800 # 删除大 key、淘汰过期 key 时会在主线程同步释放内存,key 越大阻塞越久,极端情况会导致 Redis 卡顿几秒 # Redis 4.0+ 支持后台线程惰性释放内存 # 把内存释放的重活交给后台子线程,主线程只做标记,不阻塞业务请求 # 内存淘汰时,后台异步释放内存 lazyfree-lazy-eviction yes # key 过期删除时,后台异步释放内存 lazyfree-lazy-expire yes # 服务端主动删除key(比如del大key),后台异步释放 lazyfree-lazy-server-del yes # 从库全量同步完成后,异步清空旧数据 replica-lazy-flush yes # 用户执行 DEL 命令时,默认走异步删除(等价于UNLINK) lazyfree-lazy-user-del yes # 用户执行 FLUSHDB/FLUSHALL 时,默认走异步清空 lazyfree-lazy-user-flush yes # I/O多线程(Redis 6+) # I/O多线程,可以利用多核CPU加速网络I/O。`io-threads`设置线程数,`io-threads-do-reads`决定是否对读请求也使用多线程 # Redis的核心命令处理仍然是单线程的,多线程只用于网络读写 # IO 线程数建议不超过物理 CPU 核心数的 1/2 io-threads 4 io-threads-do-reads yes

常用策略

  • noeviction(默认):不驱逐任何数据,写请求返回错误。

  • allkeys-lru:从所有key中,使用LRU算法驱逐最近最少使用的key。

  • volatile-lru:仅从设置了过期时间的key中,使用LRU算法驱逐。

  • allkeys-random:从所有key中随机驱逐。

  • volatile-random:仅从设置了过期时间的key中随机驱逐。

  • volatile-ttl:仅从设置了过期时间的key中,优先驱逐TTL(生存时间)最短的key。

  • 缓存场景allkeys-lruallkeys-random

  • 带过期时间的缓存volatile-lruvolatile-ttl

  • 数据库场景noeviction,让应用层处理内存不足的情况。

# LIMITS maxmemory 256mb maxclients 10000 maxmemory-policy volatile-lru disable-thp yes maxmemory-samples 10 oom-score-adj yes oom-score-adj-values 0 200 800 lazyfree-lazy-eviction yes lazyfree-lazy-expire yes lazyfree-lazy-server-del yes replica-lazy-flush yes lazyfree-lazy-user-del yes lazyfree-lazy-user-flush yes io-threads 4 io-threads-do-reads yes

5.4 持久化配置

# 持久化目录 | 确保Redis用户有读写权限 dir /redis-6379/data # RDB 快照保存规则 | 写流量很大、怕频繁 bgsave 影响性能,可以减少触发频率,比如去掉 60 秒 那条 dbfilename dump.rdb # 在900秒内至少有1个key发生变化,或在300秒内至少有10个key发生变化,或在60秒内至少有10000个key发生变化,则触发`BGSAVE` save 3600 1 save 300 100 save 60 10000 # RDB 持久化失败(比如磁盘满了)时,Redis 直接拒绝写入,用拒绝写入来提醒你磁盘故障 # 默认 `yes` | 宁可服务不可用,也不要产生脏数据 # 高可用场景(有从库兜底)可以改成 `no`,保证写入不中断,但要做好磁盘监控 stop-writes-on-bgsave-error yes # RDB文件是否压缩 rdbcompression yes # RDB文件是否校验和 | 在RDB文件末尾添加CRC64校验和,用于检测文件损坏 | 校验和的计算开销极小,但能有效保证数据完整性 rdbchecksum yes # AOF 持久化 appendonly yes # AOF文件名 appendfilename "appendonly.aof" # AOF同步策略 # always:每次写操作都同步到磁盘。最安全,但性能最差 # everysec:每秒同步一次。推荐。在性能和安全性之间取得了最佳平衡,最多丢失1秒数据 # no:由操作系统决定何时同步。性能最好,但最不安全 appendfsync everysec # AOF重写期间是否暂停 appendfsync # AOF重写(BGREWRITEAOF)是一个磁盘I/O密集型操作。如果同时进行appendfsync,可能会导致磁盘I/O竞争,延长重写时间 # 如果磁盘I/O能力较弱,可以设置为yes,但要注意这会增加数据丢失的风险(最多可能丢失重写期间的所有数据) no-appendfsync-on-rewrite no # AOF自动重写触发条件 # 当AOF文件大小超过上次重写后大小的100%(即翻倍),并且文件大小至少为64MB时,触发自动重写 auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb
# SNAPSHOTTING dir /redis-6379/data dbfilename dump.rdb save 3600 1 save 300 100 save 60 10000 stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes appendonly yes appendfilename "appendonly.aof" appendfsync everysec no-appendfsync-on-rewrite no auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb

5.5 安全配置

# 设置访问密码 | 默认 defualt on 使用 requirepass YourStrongPassword123! # 禁用危险命令(重命名为空字符串即禁用) # 完全禁用删库命令 rename-command FLUSHALL "" rename-command FLUSHDB "" # 重命名配置修改命令,只有知道别名的人才能改运行时配置 rename-command CONFIG "myconfig" # 禁用调试、危险运维命令 rename-command DEBUG "" rename-command KEYS ""

说明:KEYS 命令会遍历所有 key,大库下直接卡死 Redis,生产必须禁用,排查用 SCAN 替代。

# SECURITY requirepass YourStrongPassword123! rename-command FLUSHALL "" rename-command FLUSHDB "" rename-command CONFIG "myconfig" rename-command DEBUG "" rename-command KEYS ""

5.6 慢查询

# 慢查询阈值保持10ms(10000微秒),记录长度调大到1024,保留更多历史 slowlog-max-len 1024 # 开启延迟监控,超过100毫秒的事件都记录下来,排查卡顿必备,开销极低 latency-monitor-threshold 100
# SLOW slowlog-max-len 1024 latency-monitor-threshold 100

5.7 主从复制

# 配置主从关系 | 将当前实例配置为指定主节点的从节点 # replicaof <masterip> <masterport> # 主节点密码 masterauth your_master_password # 主节点用户密码 ACL masteruser <username> masterauth <password> # 从节点是否只读 replica-read-only yes # 从节点是否提供过期数据 当主从断开连接或正在同步时,从节点是否继续响应客户端请求(返回可能过期的数据) # `yes`(默认)可以保证服务可用性;`no`则更严格,但会导致服务中断 replica-serve-stale-data yes
# REPLICATION # replicaof <masterip> <masterport> # masteruser # masterpass replica-read-only yes replica-serve-stale-data yes

5.8 集群配置

# 是否开启集群模式 cluster-enabled no # 集群配置文件 cluster-config-file nodes-6379.conf # 节点超时时间 cluster-node-timeout 15000
# CLUSTER cluster-enabled no

六、启动与停止 Redis

6.1 命令行直接启动

# 注意相关文件权限 sudo chown -R redis:redis /redis-6379 # 切换redis 用户 su - redis # 指定配置文件启动(推荐方式) redis-server /redis-6379/conf/redis.conf # 不指定配置文件,使用默认配置 redis-server # 命令行覆盖配置项 redis-server /redis-6379/conf/redis.conf --port 6380 --loglevel debug
# 启动后查看日志有无报错 cat /redis-6379/log/redis.log

6.2 连接 Redis

# 默认连接 127.0.0.1:6379 redis-cli # 指定主机和端口 redis-cli -h 127.0.0.1 -p 6379 # 带密码连接 redis-cli -a YourStrongPassword123! # 连接后测试 127.0.0.1:6379> ping PONG 127.0.0.1:6379> SET hello "world" OK 127.0.0.1:6379> GET hello "world"

6.3 停止 Redis

# 优雅关闭(推荐) redis-cli shutdown # 带密码关闭 redis-cli -a YourStrongPassword123! shutdown # 强制停止(不推荐,可能导致数据丢失) pkill redis-server

shutdown 命令会先执行 RDB 快照(如果启用了持久化),然后安全退出。


七、systemd 服务配置

daemonize yes 与 systemd 托管冲突

如果你是用 systemctl 管理 Redis 服务,daemonize 必须设为 no(前台运行)。设为 yes 时,Redis 启动后会后台 fork 脱离终端,systemd 会认为进程已退出,触发服务异常重启

7.1 创建 systemd unit 文件

sudo vim /etc/systemd/system/redis.service

写入以下内容:

[Unit] Description=Redis In-Memory Data Store After=network.target [Service] User=redis Group=redis Type=forking PIDFile=/var/run/redis/redis-server.pid ExecStart=/usr/local/bin/redis-server /etc/redis/redis.conf ExecStop=/usr/local/bin/redis-cli -p 6379 shutdown Restart=always RestartSec=3 LimitNOFILE=65535 [Install] WantedBy=multi-user.target
[Unit] Description=Redis In-Memory Data Store After=network.target [Service] User=redis Group=redis Type=forking PIDFile=/redis-6379/redis-server.pid ExecStart=/usr/local/bin/redis-server /redis-6379/conf/redis.conf ExecStop=/usr/local/bin/redis-cli -p 6379 shutdown Restart=always RestartSec=3 LimitNOFILE=65535 [Install] WantedBy=multi-user.target

7.2 启用与管理服务

# 重新加载 systemd 配置 sudo systemctl daemon-reload # 启动 Redis sudo systemctl start redis # 设置开机自启 sudo systemctl enable redis # 查看服务状态 sudo systemctl status redis -l # 停止服务 sudo systemctl stop redis # 重启服务 sudo systemctl restart redis # 查看日志 sudo journalctl -u redis -f

7.3 验证服务运行

# 检查进程 ps aux | grep redis-server # 检查端口监听 ss -tlnp | grep 6379 # 测试连接 -a / --user --pass redis-cli ping

八、redis-benchmark 基础使用

Redis 自带的 redis-benchmark 工具可以快速评估当前实例的性能。

8.1 基本测试

# 默认测试(100000 请求,50 并发) redis-benchmark

8.2 自定义参数

# 指定请求数和并发数 redis-benchmark -n 50000 -c 100 # 只测试 SET 和 GET 命令 redis-benchmark -t set,get -n 100000 -c 50 # 指定 key 大小和 value 大小 redis-benchmark -t set -n 100000 -d 256 # 测试管道模式(Pipeline) redis-benchmark -t set,get -n 100000 -P 16 # 指定主机和端口 redis-benchmark -h 127.0.0.1 -p 6379 -a YourPassword

8.3 输出解读

====== SET ======
  100000 requests completed in 1.23 seconds
  50 parallel clients
  3 bytes payload
  keep alive: 1

99.99% <= 1 milliseconds
100.00% <= 2 milliseconds
81300.81 requests per second

关键指标:

  • requests per second:每秒处理请求数(QPS)
  • 99.99% <= 1 milliseconds:99.99% 的请求在 1ms 内完成

九、安全基础

9.1 设置访问密码

redis.conf 中:

requirepass P@ssw0rd!

客户端连接时需要认证:

redis-cli 127.0.0.1:6379> SET key value (error) NOAUTH Authentication required. # 方式一:连接时指定密码 redis-cli -a 123456 # 方式二:连接后认证 127.0.0.1:6379> AUTH P@ssw0rd! OK

9.2 禁用危险命令

# 完全禁用 rename-command FLUSHDB "" rename-command FLUSHALL "" rename-command DEBUG "" rename-command KEYS "" # 重命名为不可猜测的名字 rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52

⚠️ KEYS 命令在大数据量时会阻塞整个 Redis 实例,生产环境建议禁用或使用 SCAN 替代。

9.3 网络安全最佳实践

# 1. 防火墙只允许应用服务器访问 Redis sudo iptables -A INPUT -p tcp --dport 6379 -s 192.168.5.0/24 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 6379 -j DROP # 2. 或使用 firewalld(CentOS/Rocky) sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.5.0/24" port protocol="tcp" port="6379" accept' sudo firewall-cmd --reload # 3. 禁止 Redis 使用 root 用户运行 # 在 redis.conf 中确保 daemonize yes,并创建专用用户 sudo useradd -r -s /sbin/nologin redis

9.4 安全检查清单

  • 设置强密码(requirepass
  • bind 只绑定必要地址
  • protected-mode 保持开启
  • 禁用或重命名危险命令
  • 使用非 root 用户运行 Redis
  • 配置防火墙规则
  • 定期更新 Redis 到最新稳定版

十、常见问题排查

10.1 端口被占用

# 查看 6379 端口占用 ss -tlnp | grep 6379 # 或 lsof -i :6379

10.2 权限问题

# 确保数据目录权限正确 sudo chown -R redis:redis /var/lib/redis sudo chmod 750 /var/lib/redis

10.3 内存不足

# 查看 Redis 内存使用 redis-cli INFO memory # 关键指标 # used_memory_human: 当前使用内存 # maxmemory_human: 最大可用内存 # mem_fragmentation_ratio: 内存碎片率(>1.5 需关注)

10.4 连接被拒绝

# 检查 Redis 是否运行 sudo systemctl status redis # 检查 bind 配置 grep "^bind" /etc/redis/redis.conf # 检查 protected-mode grep "protected-mode" /etc/redis/redis.conf

参考文档

最后修改时间:2026-07-02 00:27:08
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论