Redis全面指南:从入门到精通
一、Redis 简介
Redis(Remote Dictionary Server)是一个开源的、基于内存的键值存储系统,支持多种数据结构,常用于缓存、消息队列、实时分析等场景。
1.1 核心特性
- 高性能:数据存储在内存中,读写速度极快(每秒数十万次操作)。
- 数据结构丰富:支持字符串(String)、哈希(Hash)、列表(List)、集合(Set)、有序集合(Sorted Set)等。
- 持久化:提供 RDB(快照)和 AOF(日志追加)两种持久化机制,确保数据安全。
- 高可用与分布式:通过 Redis Sentinel 实现故障转移,Redis Cluster 支持水平扩展。
- 多功能:支持事务、发布/订阅、Lua 脚本、过期键等特性。
1.2 典型应用场景
- 缓存:加速数据库查询,减轻后端负载。
- 会话存储:存储用户会话信息,支持分布式系统。
- 排行榜/计数器:利用有序集合实现实时排名。
- 消息队列:通过列表或 Stream 类型实现异步任务处理。
1.3 基本命令示例
# 字符串操作
SET key value
GET key# 哈希操作
HSET user:1 name "Alice"
HGET user:1 name# 列表操作
LPUSH tasks "task1"
RPOP tasks
1.4 与其他数据库对比
- 内存存储:与 MySQL 等磁盘数据库相比,Redis 牺牲持久性换取更高性能。
- 数据结构灵活性:相比 Memcached(仅支持字符串),Redis 提供更丰富的数据类型。
Redis 适用于需要低延迟和高并发的场景,但需注意内存成本及持久化配置的权衡。
二、redis安装配置
2.1 安装redis
yum - install redis
2.2 启动 Redis 服务
安装完成后,启动 Redis 服务并设置开机自启:
systemctl start redis
systemctl enable redis
2.3 配置 Redis
编辑 Redis 配置文件以进行基本设置:
vi /etc/redis.conf
修改以下关键配置项:
bind 0.0.0.0 # 允许远程访问(如需限制本地访问,设置为 127.0.0.1)
protected-mode no # 关闭保护模式(仅在测试环境使用)
requirepass yourpassword # 设置访问密码(替换 yourpassword)
daemonize更改为yes以便让程序在后台作为守护进程运行
保存并退出后,重启 Redis 服务以应用配置:
systemctl restart redis
2.4 测试 Redis 连接
进入控制台:
使用 Redis 命令行工具测试连接:
redis-cli
输入以下命令验证密码和连接:
auth yourpassword
ping
127.0.0.1:6379> ping #测试是否连接成功
PONG ##代表连接成功
127.0.0.1:6379>
2.5 防火墙配置(可选)
如需允许外部访问 Redis 默认端口(6379),运行以下命令:
firewall-cmd --permanent --add-port=6379/tcp
firewall-cmd --reload
2.6 redis-benchmark压力测试
/usr/bin/redis-benchmark -h 127.0.0.1 -p 6379 -c 50 -n 50000
三、redis.conf 配置文件结构
Redis 的配置文件 redis.conf
采用键值对格式,包含多个核心模块,每个模块以注释 #
分隔。主要模块包括网络配置、通用配置、持久化、复制、安全等。
3.1 网络配置
bind
指定 Redis 监听的网络接口。默认绑定本地回环地址(127.0.0.1),若需远程访问需修改为服务器 IP 或 0.0.0.0
(所有接口)。
示例:
bind 192.168.1.100 127.0.0.1
port
设置 Redis 服务端口,默认为 6379
。
port 6379
protected-mode
保护模式,默认开启(yes
)。若未设置密码且绑定非本地地址,需关闭(no
)以允许外部连接。
protected-mode no
3.2 通用配置
daemonize
是否以守护进程运行,默认 no
。生产环境建议改为 yes
。
daemonize yes
pidfile
指定 Redis 进程 ID 文件路径。
pidfile /var/run/redis_6379.pid
loglevel
日志级别,可选 debug
、verbose
、notice
(默认)、warning
。
loglevel notice
logfile
日志文件路径,默认为空(输出到标准输出)。
logfile /var/log/redis_6379.log
databases
设置数据库数量,默认 16
(编号 0-15)。
databases 16
3.3 持久化配置
RDB 快照
通过 save
指令触发快照生成,格式为 save <seconds> <changes>
。
save 900 1 # 900秒内至少1次修改触发快照
save 300 10 # 300秒内至少10次修改
save 60 10000 # 60秒内至少10000次修改
dir
持久化文件(RDB/AOF)存储目录,默认当前目录。
dir /var/lib/redis
AOF 持久化
通过 appendonly
开启 AOF 模式(默认关闭)。
appendonly yes
appendfilename "appendonly.aof" # AOF文件名
appendfsync everysec # 同步频率:everysec/always/no
3.4 安全配置
requirepass
设置客户端连接密码。
requirepass yourpassword
rename-command
重命名高危命令以增强安全性。
rename-command FLUSHDB "GUARDED_FLUSHDB"
rename-command CONFIG "" # 禁用命令
3.5 性能优化
maxmemory
设置最大内存限制(如 4GB
),超出时根据 maxmemory-policy
处理。
maxmemory 4gb
maxmemory-policy volatile-lru # 淘汰策略:LRU/TTL等
tcp-backlog
TCP 连接队列长度,建议调高(如 511
)。
tcp-backlog 511
3.6 集群配置
cluster-enabled
启用集群模式(默认关闭)。
cluster-enabled yes
cluster-config-file
集群节点配置文件路径。
cluster-config-file nodes-6379.conf
3.7 注意事项
- 修改配置后需重启 Redis 或通过
CONFIG REWRITE
动态重载。 - 生产环境建议关闭透明大页(
echo never > /sys/kernel/mm/transparent_hugepage/enabled
)。 - 监控
used_memory
和evicted_keys
指标以优化内存策略。
3.8 Redis工具
./redis-benchmark #用于进行redis性能测试工具
./redis-check-dump #用于修复备份数据文件
./redis-cli #redis的客户端
./redis-server #redis服务端
./redis-check-aof #修复出问题的AOF文件
./redis-sentinel #用于集群管理
#引入其他文件
include /path/to/other.conf
#加载一些so文件
loadmodule /path/to/other_module.so
#网络配置,绑定自己的ip
bind 127.0.0.1
#是否受保护,默认打开
protected-mode yes
#设置端口号
port 6379
#tcp连接
tcp-backlog 511
timeout 0
tcp-keepalive 300
#是否守护进程开启,默认是no
daemonize yes
#管理守护进程
supervised no
#配置pid,如果以后台形式运行就需要指定pid
pidfile /var/run/redis_6379.pid
#设置日志级别
loglevel notice
#日志生成的文件位置名
logfile ""
#默认数据库数量
databases 16
#是否显示logo
always-show-logo yes
#快照,在指定时间内执行了多少次操作,会写入持久化文件.rdb
save 900 1
save 300 10
save 60 10000
#持久化出错后是否继续工作
stop-writes-on-bgsave-error yes
#是否压缩rdb文件
rdbcompression yes
#是否校验,如果出错自动修复
rdbchecksum yes
#
dbfilename dump.rdb
#rdb保存目录
dir ./
#主从复制
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
replica-priority 100
#设置密码
requirepass foobared
#客户的限制
maxclients 10000
#内存设置
maxmemory <bytes>
#是否开启aof
appendonly no
#持久化名
appendfilename "appendonly.aof"
#每秒执行一次
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble yes
四、Redis基础操作
4.1 连接Redis
使用redis-cli
命令连接到本地Redis服务器:
redis-cli
如需连接远程服务器或指定端口:
redis-cli -h hostname -p port -a password
4.2 键值操作
设置键值对:
SET key value
获取键值:
GET key
删除键:
DEL key
检查键是否存在:
EXISTS key
4.3 数据类型操作
字符串(String)
追加字符串:
APPEND key value
获取字符串长度:
STRLEN key
哈希(Hash)
设置哈希字段:
HSET key field value
获取哈希字段:
HGET key field
获取所有字段:
HGETALL key
列表(List)
左推入列表:
LPUSH key value
右推入列表:
RPUSH key value
获取列表范围:
LRANGE key start stop
集合(Set)
添加元素:
SADD key member
获取所有元素:
SMEMBERS key
检查成员是否存在:
SISMEMBER key member
有序集合(Sorted Set)
添加带分数成员:
ZADD key score member
获取范围:
ZRANGE key start stop
4.4 服务器管理
查看所有键:
KEYS *
清空当前数据库:
FLUSHDB
清空所有数据库:
FLUSHALL
查看服务器信息:
INFO
4.5 过期时间
设置键的过期时间(秒):
EXPIRE key seconds
查看剩余时间:
TTL key
4.6 发布订阅
发布消息到频道:
PUBLISH channel message
订阅频道:
SUBSCRIBE channel
4.7 事务
开启事务:
MULTI
执行事务:
EXEC
4.8 Redis持久化机制
Redis提供两种主要的持久化方式:RDB(Redis DataBase)和AOF(Append Only File)。这两种方式可以单独使用,也可以结合使用以确保数据安全。
4.8.1RDB持久化
RDB是Redis默认的持久化方式,通过生成数据快照实现:
- 在指定时间间隔内,将内存中的数据集快照写入磁盘。
- 生成的RDB文件是一个紧凑的二进制文件,适合备份和灾难恢复。
- 可以通过
SAVE
或BGSAVE
命令手动触发,SAVE
会阻塞服务器,BGSAVE
在后台异步执行。
配置文件示例:
save 900 1 # 900秒内至少1个key被修改则触发
save 300 10 # 300秒内至少10个key被修改则触发
dbfilename dump.rdb # RDB文件名
dir ./ # 存储路径
4.8.2 AOF持久化
AOF记录所有写操作命令,以文本形式追加到文件中:
- 提供更好的持久性,支持每秒同步、每次操作同步或不同步。
- AOF文件会不断增长,Redis提供
BGREWRITEAOF
命令重写AOF文件以减小体积。 - AOF文件易于理解和解析,适合误操作后的数据恢复。
配置文件示例:
appendonly yes # 启用AOF
appendfilename "appendonly.aof"
appendfsync everysec # 每秒同步
auto-aof-rewrite-percentage 100 # 文件增长100%时触发重写
auto-aof-rewrite-min-size 64mb # 最小重写大小
4.8.3 混合持久化
Redis 4.0+支持RDB-AOF混合模式:
- AOF重写时会将当前数据以RDB格式写入AOF文件头部,后续命令继续以AOF格式追加。
- 结合了RDB的快速加载和AOF的高可靠性,重启时先加载RDB部分再重放AOF命令。
配置方式:
aof-use-rdb-preamble yes # 启用混合模式
4.8.4 选择建议
- 如果注重性能且能容忍分钟级数据丢失,使用RDB。
- 如果要求更高的数据安全性,使用AOF或混合模式。
- 生产环境建议同时开启RDB和AOF,利用
redis-check-aof
和redis-check-rdb
工具定期检查文件完整性。
手动保存数据:
SAVE
后台保存数据:
BGSAVE
五、Redis 主从配置
环境准备
- 确保已安装 Redis 服务(版本建议 5.0+)
- 主节点和从节点需网络互通
- 配置文件路径通常为
/etc/redis/redis.conf
5.1 主节点配置
编辑主节点配置文件:
vim /etc/redis/redis.conf
修改以下参数:
bind 0.0.0.0
protected-mode no
requirepass your_master_password # 可选设置密码
重启 Redis 服务:
systemctl restart redis
5.2 从节点配置
编辑从节点配置文件:
vim /etc/redis/redis.conf
添加/修改以下参数:
replicaof <master_ip> 6379
masterauth your_master_password # 若主节点有密码需配置
replica-read-only yes
重启从节点服务:
systemctl restart redis
5.3 验证主从状态
在主节点执行:
redis-cli info replication
输出应包含:
role:master
connected_slaves:1
在从节点执行相同命令,输出应显示:
role:slave
master_host:<master_ip>
5.4 故障处理要点
- 网络检查:确保主从节点能互相 ping 通
- 端口开放:确认防火墙放行 6379 端口
- 密码一致性:主从节点
masterauth
需与主节点requirepass
一致 - 日志查看:
tail -f /var/log/redis/redis-server.log
5.5 高级配置建议
- 持久化配置:主节点开启
appendonly yes
,从节点可关闭持久化 - 安全加固:建议配置 Redis 密码并限制绑定 IP
- 监控设置:通过
redis-cli --stat
实时监控同步状态
5.6 主从切换流程
当主节点故障时,可手动提升从节点:
- 在从节点执行
REPLICAOF NO ONE
- 修改其他从节点指向新主节点
- 更新客户端连接配置
注意:自动故障转移需使用 Redis Sentinel 或 Redis Cluster 方案。