五、Redis 五大数据类型(商城场景实战)
Redis 支持 5 种核心数据类型,适配不同商城业务场景:
5.1 String(字符串)
最基础类型,适用于缓存单个值(如广告位内容、商品库存)。
# 赋值
set ad_banner "首页轮播图数据"
# 取值
get ad_banner
# 删除
del ad_banner
# 自增(适用于库存、点赞数)
incr goods_stock_1001 # 商品1001库存+1
decr goods_stock_1001 # 商品1001库存-1
5.2 Hash(哈希)
适用于缓存对象(如商品信息、用户信息),可单独操作对象字段。
# 赋值(用户ID:1001,姓名:张三,年龄:25)
hset user_1001 name "张三"
hset user_1001 age 25
# 取值
hget user_1001 name # 获取姓名
# 删除字段
hdel user_1001 age
5.3 List(列表)
有序可重复,基于双向链表实现,适用于秒杀队列、评论列表。
# 左插入(队头)
lpush comment_1001 "商品质量好" "物流快"
# 右插入(队尾)
rpush comment_1001 "性价比高"
# 查看列表(0开始,-1表示最后一个)
lrange comment_1001 0 -1
# 删除指定元素
lrem comment_1001 0 "物流快" # 0表示删除所有匹配值
5.4 Set(集合)
无序不可重复,适用于商品标签、用户关注列表。
# 添加元素
sadd goods_tag_1001 "数码" "手机" "智能"
# 查看所有元素
smembers goods_tag_1001
# 删除元素
srem goods_tag_1001 "智能"
5.5 Zset(有序集合)
有序不可重复,通过分数排序,适用于商品销量排名、热榜。
# 添加元素(分数+值)
zadd goods_sales 100 1001 200 1002 150 1003
# 正序查看(按销量从低到高)
zrange goods_sales 0 -1
# 倒序查看(按销量从高到低)
zrevrange goods_sales 0 -1
# 查看元素+分数
zrange goods_sales 0 -1 withscores
# 删除元素
zrem goods_sales 1003
六、Redis 持久化(保证数据不丢失)
Redis 数据默认存在内存中,持久化可将数据同步到硬盘,避免重启 / 宕机丢失。
6.1 RDB(默认方式)
原理
通过 "快照" 方式,满足指定条件时自动将内存数据写入硬盘(生成dump.rdb文件)。默认触发条件(redis.conf):
save 900 1 # 900秒内至少1个key修改
save 300 10 # 300秒内至少10个key修改
save 60 10000 # 60秒内至少10000个key修改
优缺点
- ✅ 优点:快照文件体积小,恢复速度快;
- ❌ 缺点:宕机时会丢失最后一次快照后的所有数据,不适合对数据完整性要求极高的场景。
6.2 AOF(追加文件)
原理
记录所有写操作命令,重启时重新执行命令恢复数据(生成appendonly.aof文件)。
开启方式(redis.conf)
appendonly yes # 开启AOF
appendfsync everysec # 每秒同步一次(平衡性能与数据安全)
优缺点
- ✅ 优点:数据完整性高(仅丢失 1 秒内数据);
- ❌ 缺点:AOF 文件体积大,恢复速度慢,对性能有轻微影响。
6.3 实战建议
商城项目中,建议RDB+AOF 结合使用:RDB 保证快速恢复,AOF 保证数据完整性。
七、Redis 主从复制(解决单点故障)
7.1 核心概念
- 主库(Master):可读写,数据同步到从库;
- 从库(Slave):只读,从主库同步数据;
- 作用:实现数据备份,主库宕机后从库可临时提供读服务。
7.2 配置步骤
主库配置
无需特殊配置,保持默认即可。
从库配置
修改从库的redis.conf:
slaveof 192.168.25.153 6379 # 主库IP+端口
重启从库,即可自动同步主库数据。
7.3 核心特点
- 主库写入数据后,实时同步到从库;
- 主从复制不阻塞主库,同步时主库可正常处理请求;
- 主库宕机后,从库仅能读,无法自动切换为主库(需手动干预)。
八、Redis 集群搭建(高可用分布式部署)
商城项目高并发场景下,单节点 Redis 无法满足性能和高可用要求,需搭建集群。
8.1 集群架构
- Redis 集群内置 16384 个哈希槽,每个 key 通过
crc16(key) % 16384映射到指定槽位; - 集群至少需要 3 个主节点 + 3 个从节点(共 6 个实例),实现高可用;
- 任意节点可接收请求,自动路由到对应槽位的节点。
8.2 搭建环境准备
1. 安装 Ruby(集群搭建依赖)
yum install ruby
yum install rubygems
gem install redis-3.0.0.gem
2. 准备 6 个 Redis 实例(伪分布式)
# 创建集群目录
mkdir -p /usr/local/redis-cluster
# 复制6个Redis实例(端口7001-7006)
cp -r /usr/local/redis /usr/local/redis-cluster/redis-7001
cp -r /usr/local/redis /usr/local/redis-cluster/redis-7002
cp -r /usr/local/redis /usr/local/redis-cluster/redis-7003
cp -r /usr/local/redis /usr/local/redis-cluster/redis-7004
cp -r /usr/local/redis /usr/local/redis-cluster/redis-7005
cp -r /usr/local/redis /usr/local/redis-cluster/redis-7006
3. 修改每个实例的配置(redis.conf)
# 修改端口(7001-7006依次对应)
port 7001
# 开启集群模式
cluster-enabled yes
# 删除RDB/AOF文件(避免旧数据干扰)
# rm -rf /usr/local/redis-cluster/redis-7001/bin/dump.rdb
# rm -rf /usr/local/redis-cluster/redis-7001/bin/appendonly.aof
8.3 启动 / 关闭集群脚本
启动脚本(start-all.sh)
#!/bin/bash
cd /usr/local/redis-cluster/redis-7001
./bin/redis-server bin/redis.conf
cd ../redis-7002
./bin/redis-server bin/redis.conf
cd ../redis-7003
./bin/redis-server bin/redis.conf
cd ../redis-7004
./bin/redis-server bin/redis.conf
cd ../redis-7005
./bin/redis-server bin/redis.conf
cd ../redis-7006
./bin/redis-server bin/redis.conf
赋予执行权限:chmod 777 start-all.sh
关闭脚本(shutdown-all.sh)
#!/bin/bash
cd /usr/local/redis-cluster/redis-7001
./bin/redis-cli -p 7001 shutdown
cd ../redis-7002
./bin/redis-cli -p 7002 shutdown
cd ../redis-7003
./bin/redis-cli -p 7003 shutdown
cd ../redis-7004
./bin/redis-cli -p 7004 shutdown
cd ../redis-7005
./bin/redis-cli -p 7005 shutdown
cd ../redis-7006
./bin/redis-cli -p 7006 shutdown
8.4 搭建集群(Ruby 脚本)
# 进入Redis源码的src目录
cd /usr/upload/redis-3.0.0/src
# 搭建集群(--replicas 1 表示1个主节点对应1个从节点)
./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.5 集群测试
# 连接集群(-c表示集群模式)
./redis-cli -c -p 7001
# 测试数据写入(自动路由到对应节点)
set goods_1001 "iPhone 15"
get goods_1001
# 查看集群信息
cluster info
# 查看集群节点
cluster nodes
九、总结
本文从商城项目实战场景出发,完整覆盖了 Redis 的核心知识点:
- 基础安装与启停:满足单机部署需求;
- 核心命令与数据类型:适配不同业务缓存场景;
- 持久化:保证数据不丢失;
- 主从复制:解决单点故障;
- 集群搭建:满足高并发、高可用的生产环境需求。
Redis 作为商城项目的核心中间件,掌握以上知识点足以应对大部分缓存场景。实际生产中,还需结合业务场景优化配置(如过期策略、内存淘汰策略),进一步提升 Redis 的性能和稳定性。