Redis 从入门到集群搭建(续)

五、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 的核心知识点:

  1. 基础安装与启停:满足单机部署需求;
  2. 核心命令与数据类型:适配不同业务缓存场景;
  3. 持久化:保证数据不丢失;
  4. 主从复制:解决单点故障;
  5. 集群搭建:满足高并发、高可用的生产环境需求。

Redis 作为商城项目的核心中间件,掌握以上知识点足以应对大部分缓存场景。实际生产中,还需结合业务场景优化配置(如过期策略、内存淘汰策略),进一步提升 Redis 的性能和稳定性。

相关推荐
givemeacar2 小时前
十七:Spring Boot依赖 (2)-- spring-boot-starter-web 依赖详解
前端·spring boot·后端
147API2 小时前
Claude Code 本地化实践:Prompt 缓存机制解析与国内接入成本优化
缓存·prompt·开发工具·降本增效
掘金者阿豪3 小时前
从 Chat Completions 到 Responses:一文彻底搞懂 OpenAI 新一代统一接口设计
后端
mOok ONSC3 小时前
Spring Boot 3.4 正式发布,结构化日志!
java·spring boot·后端
野犬寒鸦3 小时前
计网复习Day01
服务器·后端·网络协议·面试
VelinX3 小时前
【个人学习||spring boot】
spring boot·后端·学习
s1mple“”3 小时前
大厂Java面试实录:从Spring Boot到AI技术的医疗健康场景深度解析
spring boot·redis·微服务·kafka·向量数据库·java面试·ai技术
Lyyaoo.3 小时前
Spring Boot自动配置
java·spring boot·后端
呆毛cyan3 小时前
K8s与CICD 部署 - 3. Harbor
后端