Redis从入门到集群搭建超详细教程
一、为什么使用 Redis
商城首页访问量通常极高,若直接从数据库获取首页菜单和大广告位信息,会给数据库带来巨大压力。因此,这类高频访问数据需从缓存获取,而 Redis 是缓存技术的主流选择之一。
主流缓存技术对比:
| 缓存技术 | 核心特点 |
|---|---|
| Memcached | 多线程 |
| Redis | 单线程(高性能) |
| ehcache | (逐步淘汰) |
二、Redis 基础认知
2.1 什么是 Redis
Redis 是用 C 语言开发的开源高性能键值对(key-value)数据库,核心特点是将数据存储在内存中,因此存取速度极快,广泛应用于互联网项目。
2.2 Redis 下载
官方下载地址:http://download.redis.io/releases/redis-3.0.0.tar.gz
2.3 Redis 安装(Linux 环境)
2.3.1 安装依赖
Redis 基于 C 语言开发,需先安装编译环境:
yum install gcc-c++
2.3.2 编译安装
- 解压源码包:
tar -zxvf redis-3.0.0.tar.gz -C /usr/upload/
- 进入解压目录编译:
cd /usr/upload/redis-3.0.0
make
- 安装到指定目录:
make install PREFIX=/usr/local/redis
三、Redis 启动与关闭
3.1 前端启动(不推荐)
启动命令
cd /usr/local/redis/bin
./redis-server
缺点
SSH 窗口关闭则 Redis 进程终止,仅适用于临时测试。
关闭方式
直接按ctrl + c终止进程。
3.2 后端启动(生产环境推荐)
- 拷贝配置文件到安装目录:
cp /usr/upload/redis-3.0.0/redis.conf /usr/local/redis/bin
- 修改配置文件,将
daemonize由no改为yes:
daemonize yes
- 启动 Redis:
cd /usr/local/redis/bin
./redis-server redis.conf
3.3 通用关闭方式
cd /usr/local/redis/bin
./redis-cli -p 端口号 shutdown
# 示例:关闭6379端口的Redis
./redis-cli -p 6379 shutdown
四、Redis 基本命令
4.1 连接 Redis
./redis-cli -h 127.0.0.1 -p 6379
4.2 核心基础命令
| 命令 | 作用 | 示例 |
|---|---|---|
| set | 设置键值对 | set test 123 |
| get | 获取键值 | get test → 返回 "123" |
| keys * | 查看所有 key | keys * |
| exists | 判断 key 是否存在 | exists test → 返回 1(存在)/0(不存在) |
| expire | 设置 key 过期时间 | expire test 60(60 秒过期) |
| ttl | 查看 key 剩余有效期 | ttl test → 返回剩余秒数 /-1(永不过期)/-2(已过期) |
| clear | 清屏 | clear |
4.3 多数据库操作
Redis 默认提供 16 个数据库(下标 0-15),默认连接 0 号库:
- 切换数据库:
select 数据库下标(如select 1切换到 1 号库) - 清空当前库:
FLUSHDB - 清空所有库:
FLUSHALL
注意:Redis 不支持修改数据库名称,仅能通过下标切换。
五、Redis 五大数据类型
5.1 String(字符串)
最基础类型,key-value 键值对形式:
# 赋值
set test 123
# 取值
get test
# 删除
del test
# 自增/自减
incr num # 数值+1
decr num # 数值-1
5.2 Hash(哈希)
键值对嵌套,适合存储对象(key-field-value):
# 赋值
hset user name zhangsan
# 取值
hget user name
# 删除
hdel user name
5.3 List(列表)
有序、可重复,基于双向链表实现:
# 左插入(头部)
lpush list a b c d
# 右插入(尾部)
rpush list 1 2 3 4
# 查看列表(0为起始,-1为末尾)
lrange list 0 -1
# 删除指定元素(0表示删除所有匹配项)
lrem list 0 d
5.4 Set(集合)
无序、不可重复:
# 添加元素
sadd set1 a b c c c d
# 查看所有元素
smembers set1
# 删除元素
srem set1 a
5.5 Zset(有序集合)
有序、不可重复,通过分数(score)排序:
# 添加元素(score+值)
zadd zset1 2 a 5 b 1 c 6 d
# 正序查看(带分数)
zrange zset1 0 -1 withscores
# 倒序查看
zrevrange zset1 0 -1
# 删除元素
zrem zset1 a
5.6 数据类型总结
| 数据类型 | 核心特点 | 核心操作 |
|---|---|---|
| String | 单键值对 | set/get/del/incr/decr |
| Hash | 键 - 字段 - 值 | hset/hget/hdel |
| List | 有序可重复 | lpush/rpush/lrange/lrem |
| Set | 无序不可重复 | sadd/smembers/srem |
| Zset | 有序不可重复 | zadd/zrange/zrevrange/zrem |
六、Redis 持久化
Redis 数据默认存储在内存,持久化可将数据同步到硬盘,避免重启 / 宕机数据丢失,支持两种方式:
6.1 RDB 持久化(默认)
原理
通过快照(snapshotting)实现,满足指定条件时自动将内存数据写入硬盘。
核心配置(redis.conf)
save 900 1 # 900秒内1个key修改则快照
save 300 10 # 300秒内10个key修改则快照
save 60 10000 # 60秒内10000个key修改则快照
dir /usr/local/redis/bin # 快照文件存储路径
dbfilename dump.rdb # 快照文件名
优缺点
- 优点:数据存取速度快
- 缺点:宕机时会丢失最后一次快照后的修改(数据完整性不足)
6.2 AOF 持久化
原理
记录所有写操作命令,重启时重新执行命令恢复数据。
开启配置(redis.conf)
conf
appendonly yes # 开启AOF
appendfilename appendonly.aof # AOF文件名
appendfsync everysec # 每秒同步(默认策略)
# appendfsync always # 每次修改都同步(最安全,性能最差)
# appendfsync no # 不主动同步(性能最好,数据风险高)
优缺点
- 优点:数据完整性高
- 缺点:频繁写磁盘,降低 Redis 存取速度
七、Redis 主从复制(高可用基础)
7.1 主从复制概念
- 一个主 Redis(master)可挂载多个从 Redis(slave)
- 主从数据实时同步,master 写入数据自动同步到 slave
- master 故障时,slave 可提供读服务(默认不可写)
- 支持级联复制(一个 Redis 可同时是 master 和 slave)
7.2 主从配置
7.2.1 主 Redis 配置
无需特殊配置,保持默认即可。
7.2.2 从 Redis 配置
修改从 Redis 的redis.conf:
slaveof 主RedisIP 主Redis端口
# 示例:slaveof 192.168.101.3 6379
7.3 主从复制过程
- slave 启动后,向 master 发送
sync命令 - master 启动后台进程生成 RDB 快照,并缓存期间的写命令
- master 将 RDB 文件发送给 slave,slave 加载 RDB 恢复数据
- master 将缓存的写命令转发给 slave,保证数据同步
八、Redis 集群搭建(Redis-Cluster)
8.1 集群架构说明
- 集群至少需 3 个主节点,为保证高可用,每个主节点需 1 个从节点(共 6 个节点)
- 内置 16384 个哈希槽,key 通过
crc16(key) % 16384映射到指定槽位,槽位均匀分配到各主节点 - 节点间通过 PING-PONG 机制互联,超过半数节点检测到某节点失效则标记为故障
8.2 集群搭建环境(伪分布式)
8.2.1 安装依赖(Ruby)
yum install ruby
yum install rubygems
gem install redis-3.0.0.gem
8.2.2 准备 6 个 Redis 实例(7001-7006 端口)
- 复制 Redis 实例(以 7001 为例):
mkdir -p /usr/local/redis-cluster
cp -r /usr/local/redis /usr/local/redis-cluster/redis-7001
- 重复上述操作,创建 redis-7002 至 redis-7006
- 修改每个实例的
redis.conf:- 修改端口(7001/7002/.../7006)
- 开启集群模式:
cluster-enabled yes - 删除
dump.rdb和appendonly.aof(避免旧数据干扰)
8.2.3 编写启动 / 关闭脚本
启动脚本(start-all.sh)
#!/bin/bash
cd /usr/local/redis-cluster/redis-7001
./bin/redis-server bin/redis.conf
cd ..
cd redis-7002
./bin/redis-server bin/redis.conf
cd ..
cd redis-7003
./bin/redis-server bin/redis.conf
cd ..
cd redis-7004
./bin/redis-server bin/redis.conf
cd ..
cd redis-7005
./bin/redis-server bin/redis.conf
cd ..
cd redis-7006
./bin/redis-server bin/redis.conf
cd ..
赋予执行权限:
chmod 777 start-all.sh
关闭脚本(shutdown-all.sh)
#!/bin/bash
cd /usr/local/redis-cluster
./redis-7001/bin/redis-cli -p 7001 shutdown
./redis-7002/bin/redis-cli -p 7002 shutdown
./redis-7003/bin/redis-cli -p 7003 shutdown
./redis-7004/bin/redis-cli -p 7004 shutdown
./redis-7005/bin/redis-cli -p 7005 shutdown
./redis-7006/bin/redis-cli -p 7006 shutdown
赋予执行权限:
chmod 777 shutdown-all.sh
8.2.4 构建集群(Ruby 脚本)
cd /usr/upload/redis-3.0.0/src
./redis-trib.rb create --replicas 1 192.168.25.153:7001 192.168.25.153:7002 192.168.25.153:7003 192.168.25.153:7004 192.168.25.153:7005 192.168.25.153:7006
执行后输入yes确认配置,等待集群构建完成。
8.3 集群测试
# 连接集群(-c表示集群模式)
cd /usr/local/redis-cluster/redis-7001/bin
./redis-cli -c -p 7001
# 测试数据写入(自动路由到对应节点)
set name test
get name
8.4 集群常用命令
cluster info # 查看集群整体信息
cluster nodes # 查看所有节点信息(主从、槽位等)
九、总结
- Redis 核心优势是内存存储带来的高性能,适用于高频数据缓存场景。
- 持久化需根据业务平衡性能与数据完整性(RDB/ AOF 可选)。
- 主从复制解决单点故障,集群(Redis-Cluster)实现水平扩展,满足高并发、高可用需求。
注意:实际生产环境需根据服务器资源调整配置,做好监控与容灾预案。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐
所有评论(0)