当前位置: 首页 > news >正文

Redis在商城开发中起到什么作用?

在商城开发中,Redis 凭借其高性能(内存数据库)、多数据结构支持、原子性操作、分布式能力等特性,成为解决核心业务痛点(如高并发、性能瓶颈、数据一致性)的关键组件。其作用可围绕商城的核心场景展开,覆盖“性能优化、高并发处理、用户体验、业务可靠性”四大维度,具体如下:

一、核心作用:缓存优化——缓解数据库压力

商城中高频访问但低频修改的数据(如商品详情、分类列表、热门商品),若直接查询数据库(MySQL 等),会因磁盘 IO 慢导致响应延迟,且高并发下数据库易崩溃。Redis 作为“内存缓存”,可将这类数据暂存,大幅提升访问速度。

1. 典型缓存场景
缓存数据类型商城业务场景Redis 数据结构选择价值体现
商品基础信息商品详情页(名称、价格、库存、图片)String/Hash详情页访问量极高,缓存后响应时间从“百ms”降至“亚ms”
商品分类/筛选列表首页分类导航、商品列表页筛选结果Hash/ZSet(排序筛选)避免重复查询数据库,减少联表操作开销
热门商品/推荐列表首页“热销榜”、“猜你喜欢”ZSet(按销量/热度排序)快速获取排序结果,支持动态更新热度
用户信息(非敏感)登录用户的昵称、头像、等级Hash避免频繁查询用户表,提升页面加载速度
2. 缓存策略设计

为避免“缓存脏数据”(缓存与数据库数据不一致),商城中常用 “Cache-Aside 缓存策略”

  • 读操作:先查 Redis → 命中则返回;未命中则查数据库 → 同步到 Redis 后返回。
  • 写操作:先更新数据库 → 再删除 Redis 缓存(而非直接更新缓存,避免并发下数据不一致)。

二、高并发场景:解决“秒杀、库存、超卖”核心痛点

商城的秒杀活动、大促(如618/双11) 是典型的高并发场景(瞬间请求量可达数万/秒),此时数据库完全无法承载。Redis 凭借“原子性操作”和“高性能”,成为处理这类场景的核心工具。

1. 分布式锁——保证库存操作的原子性(防超卖)

商城下单时需“查询库存→扣减库存”,若多线程/多服务并发操作,易出现“超卖”(如库存100,最终卖出101)。Redis 可实现分布式锁,确保同一时间只有一个请求能修改库存,避免数据不一致。

  • 实现原理:利用 Redis 的 SET key value NX EX 命令(NX=仅当key不存在时设置,EX=设置过期时间),本质是“用一个 Redis key 作为锁标志”:
    1. 下单前,尝试获取锁(执行 SET lock:sku:1001 "1" NX EX 10,1001为商品ID);
    2. 获取成功:执行“查库存→扣减库存”,完成后释放锁(DEL lock:sku:1001);
    3. 获取失败:说明其他请求正在操作,当前请求重试或返回“稍候再试”。
  • 进阶方案:使用 Redisson 框架(基于 Redis 的分布式锁实现),自动解决“锁超时、重入、释放异常”等问题,简化开发。
2. 库存预减——秒杀场景的流量削峰

秒杀活动中,若直接操作数据库扣减库存,会导致数据库瞬间过载。Redis 可先“预减库存”,再异步同步到数据库,大幅降低数据库压力:

  1. 秒杀开始前,将商品库存加载到 Redis(如 SET stock:sku:1001 100);
  2. 用户抢购时,先执行 Redis 原子减操作(DECR stock:sku:1001);
  3. DECR 后结果 ≥0:说明抢到资格,生成“待支付订单”,异步任务将库存同步到数据库;
  4. DECR 后结果 <0:直接返回“已抢完”,无需访问数据库。

三、用户体验优化:会话与购物车管理

商城的“登录状态、购物车”需要跨设备/跨服务共享(如用户在手机端加购商品,电脑端需可见),传统的“服务器本地 Session”无法满足分布式部署需求,Redis 可实现全局共享。

1. 分布式会话(Session 共享)
  • 问题:传统 Session 存在服务器本地,若商城部署多台 Tomcat,用户切换服务器后需重新登录。
  • Redis 解决方案:
    1. 用户登录成功后,生成唯一 SessionID(如 session:user:12345,12345为用户ID);
    2. 将用户登录状态(如登录时间、权限)存入 Redis 的 Hash 结构;
    3. 前端 Cookie 存储 SessionID,后续请求携带 SessionID 到 Redis 校验登录状态。
  • 优势:支持多服务共享,且 Redis 可设置过期时间(如2小时),自动销毁失效会话。
2. 购物车实现

用户购物车需支持“添加、删除、修改数量、跨设备同步”,Redis 的 Hash 结构天然适配:

  • 设计:以 cart:user:12345 为 key(12345为用户ID),Hash 的 field 为“商品ID”,value 为“商品数量+选中状态”(如 {"1001":"2:1", "1002":"1:0"},1=选中,0=未选中);
  • 操作:
    • 添加商品:HSET cart:user:12345 1003 "1:1"
    • 修改数量:HSET cart:user:12345 1001 "3:1"
    • 查看购物车:HGETALL cart:user:12345
  • 优势:读写速度快,支持跨设备同步(只要用户登录,不同设备均可读取 Redis 中的购物车数据)。

四、业务功能支撑:计数器与延迟队列

商城中“高频更新、实时性要求高”的计数场景,或“延迟执行”的业务(如订单超时取消),Redis 可高效实现。

1. 实时计数器

商城需统计“商品浏览量、点赞数、销量、评论数”等,这类数据若每次更新都写数据库,会因“高频写操作”导致性能瓶颈。Redis 的原子自增/自减命令(INCR/DECR)可完美解决:

  • 商品浏览量:用户访问详情页时,执行 INCR view:sku:1001,实时累加;
  • 商品销量:订单支付成功后,执行 INCR sales:sku:1001,同步更新“热销榜”;
  • 优势:单 Redis 实例每秒可支持数十万次 INCR 操作,且天然支持原子性,避免计数偏差。
2. 延迟队列——订单超时取消

商城中“订单创建后30分钟未支付自动取消”是核心需求,传统“定时任务轮询数据库”会导致资源浪费(大量无效查询)。Redis 可实现轻量级延迟队列:

  • 方案1:基于 ZSet(有序集合)
    1. 订单创建时,将“订单ID”作为 ZSet 的 member,“当前时间+30分钟”作为 score(过期时间戳);
    2. 启动后台线程,每隔10秒查询 ZSet 中 score < 当前时间戳 的 member(即超时订单);
    3. 处理超时订单(取消订单、恢复库存),并从 ZSet 中删除该 member。
  • 方案2:基于“键过期通知”
    1. 订单创建时,设置 Redis key(如 order:expire:45678),并指定过期时间30分钟;
    2. 开启 Redis 的 keyspace notifications(键空间通知),当 key 过期时,Redis 发送通知;
    3. 服务端监听通知,收到后执行“取消订单”逻辑。

五、其他辅助作用

  1. 限流保护:防止恶意请求(如刷单、爬虫)压垮系统。例如,用 Redis 实现“令牌桶算法”:每秒生成 N 个令牌存入 Redis,用户请求需先获取令牌,无令牌则拒绝,控制请求频率。
  2. 排行榜:如“热销商品榜”“用户消费榜”,利用 ZSet 的“score 排序”特性,实时更新并快速查询 TopN 数据(如 ZRANGE sales:rank 0 9 WITHSCORES 获取销量前10商品)。

总结:Redis 在商城中的核心价值

价值维度具体体现解决的商城痛点
性能提升缓存高频数据,减少数据库 IO商品详情页、列表页加载慢,数据库压力大
高并发支撑分布式锁、库存预减、限流秒杀超卖、大促数据库崩溃、恶意请求攻击
用户体验优化分布式会话、跨设备购物车多端登录需重复验证、购物车不同步
业务可靠性实时计数器、延迟队列计数偏差、订单超时无法自动取消

简言之,Redis 是商城架构中“承上启下”的关键组件——向上支撑高并发业务,向下保护数据库稳定,同时直接优化用户体验,是大型商城系统不可或缺的技术选型。


文章转载自:

http://nkNyR1qA.snccL.cn
http://SFk9Reda.snccL.cn
http://IidVBBT8.snccL.cn
http://glzbIUYI.snccL.cn
http://m9CVeQKR.snccL.cn
http://ejsPSdYx.snccL.cn
http://7ecH9KrQ.snccL.cn
http://e5xft32J.snccL.cn
http://rkNU6K5U.snccL.cn
http://BgtOOYPD.snccL.cn
http://Z6yKA9wT.snccL.cn
http://MPHfM3fT.snccL.cn
http://NVV1C15C.snccL.cn
http://7visasQg.snccL.cn
http://HVDsvdrU.snccL.cn
http://KPo3mn2e.snccL.cn
http://uYmZ4Qre.snccL.cn
http://6dpAewNe.snccL.cn
http://SLCRIJb4.snccL.cn
http://7vkiavF8.snccL.cn
http://4JCvbjgx.snccL.cn
http://CD9Qjuyh.snccL.cn
http://t5eFdwJY.snccL.cn
http://2ASivKUK.snccL.cn
http://crkBUKcP.snccL.cn
http://CvIMytAj.snccL.cn
http://NnMlK9Ar.snccL.cn
http://QTUrYXGs.snccL.cn
http://pTii6nLD.snccL.cn
http://VirycNT0.snccL.cn
http://www.dtcms.com/a/367479.html

相关文章:

  • 华为OD最新机试真题-可以处理的最大任务数-OD统一考试(C卷)
  • 学习嵌入式第四十六天
  • redis的hash表如何扩容
  • 单片机和PLC有哪些区别?揭秘单片机MCU的常见应用
  • 基于STM32的智能家居语音控制系统设计
  • 操作系统-进程通信
  • IPV6之DHCPv6服务器和中继代理和前缀代理服务器客户端
  • Fiddler断点应用和弱网测试
  • 【C语言】 第三课 函数与栈帧机制详解
  • 2026届IC秋招联芸科技IC面经(完整面试题)
  • 【数学建模学习笔记】机器学习回归:随机森林回归
  • UE4 UAT 的六大流程 build cook stage pacakge archive deploy 与UAT的参数
  • 具身智能多模态感知与场景理解:多模态3D场景理解
  • 3D 可视化数字孪生运维管理平台:构建 “虚实协同” 的智慧运维新范式
  • 解决前端文件下载时文件名自定义的完美方案
  • 第22节:性能监控与内存管理——构建高性能3D应用
  • 为什么ApiFox的分页查询的返回Vo的数据没有全部展示? 只展示了返回有数据的?没有数据的为什么不展示?
  • 数智先锋 | 重大活动零错误运行!Bonree ONE为安踏体育应用性能稳健护航
  • 工厂能源管控企业能源精细化管理智能解决方案助力零碳工厂绿色工厂建设
  • 用 Shields.io 定制 README 个性徽章
  • RAGFlow切分方法详解
  • 光伏人解放双手!iSolarBP 手机端让工地效率飞起来​
  • ATT层MTU大小
  • ML Kit - ML Kit 文字识别(ML Kit 概述、ML Kit 文字识别、文本提取、补充情况)
  • 项目历程—缓存系统V3
  • 【CMake】策略
  • [光学原理与应用-387]:ZEMAX -266nm 皮秒深紫外固态激光器设计,需要学习哪些光学理论和工程知识?
  • 【面试题】召回、排序哪个阶段最可能出问题?
  • 记录Pycharm所使用虚拟环境与终端无法对应
  • 理解 C# `async` 的本质:从同步包装到状态机