电商项目part10 高并发缓存实战

这篇具有很好参考价值的文章主要介绍了电商项目part10 高并发缓存实战。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

缓存的数据一致性

只要使用到缓存,无论是本地内存做缓存还是使用 redis 做缓存,那么就会存在数据同步的问题。

先读缓存数据,缓存数据有,则立即返回结果;如果没有数据,则从数据库读数据,并且把读到的数据同步到缓存里,提供下次读请求返回数据。

这样能有效减轻数据库压力,但是如果修改删除数据,因为缓存无法感知到数据在数据库的修改。这样就会造成数据库中的数据与缓存中数据不一致的问题

更新缓存类

1、先更新缓存,再更新 DB
这个方案我们一般不考虑。原因是更新缓存成功,更新数据库出现异常了,导致缓存数据与数据库数据完全不一致,而且很难察觉,因为缓存中的数据一直都存在。
2. 先更新 DB,再更新缓存
这个方案也我们一般不考虑,原因跟第一个一样,数据库更新成功了,缓存更新失败,同样会出现数据不一致问题

删除缓存类

3、先删除缓存,后更新 DB。该方案会读取到脏数据同时会 有击穿风险
电商项目part10 高并发缓存实战,缓存
4、先更新 DB,后删除缓存
读的时候,先读缓存,缓存没有的话,就读数据库,然后取出数据后放入缓存,同时返回响应。更新的时候,先更新数据库,然后再删除缓存。这种情况不存在并发问题么?(脏数据问题)

假设这会有两个请求,一个请求 A 做查询操作,一个请求 B 做
更新操作,那么会有如下情形产生
(1)缓存刚好失效
(2)请求 A 查询数据库,得一个旧值
(3)请求 B 将新值写入数据库
(4)请求 B 删除缓存
(5)请求 A 将查到的旧值写入缓存
电商项目part10 高并发缓存实战,缓存
如果发生上述情况,确实是会发生脏数据。然而,发生这种情况的概率不高(写操作比读操作执行效率要快)
这一情形很难出现。但一定要解决这种并发问题怎么办?

首先,给缓存设有效时间是一种方案。
其次,采用异步延时删除策略。
但是,更新数据库成功了,但是在删除缓存的阶段出错了没有删除成功怎么办?这个问题,在删除缓存类的方案都是存在的,那么此时再读取缓存的时候每次都是错误的数据了。
此时解决方案有两个,一是就是利用消息队列进行删除的补偿。具体的业务逻辑用语言描述如下:
(更新成功后删除失败,向mq队列中发送一条消息,消费者进行删除redis的key)
电商项目part10 高并发缓存实战,缓存
1、请求 A 先对数据库进行更新操作
2、在对 Redis 进行删除操作的时候发现报错,删除失败
3、此时将 Redis 的 key 作为消息体发送到消息队列中
4、系统接收到消息队列发送的消息后
5、再次对 Redis 进行删除操作
但是这个方案会有一个缺点就是会对业务代码造成大量的侵入,深深的耦合在一起,所以这时会有一个更好的优化方案,对 Mysql 数据库更新操作后再 binlog 日志中我们都能够找到相应的操作,那么可以订阅 Mysql 数据库的 binlog 日志对缓存进行操作。
电商项目part10 高并发缓存实战,缓存
说到底就是通过数据库的 binlog 来异步淘汰 key,利用工具(canal)将 binlog日志采集发送到 MQ 中,然后通过 ACK 机制确认处理删除缓存。
先更新 DB,后删除缓存,这种方式,被称为 Cache Aside Pattern,属于缓存更新的设计模式之一。

缓存一致性如果追求强一致,要么串行化,要么使用分布式读写锁,要么通过 2PC 或是 Paxos 协议保证一致性,要么就是拼命的降低并发时脏数据的概率文章来源地址https://www.toymoban.com/news/detail-691216.html

到了这里,关于电商项目part10 高并发缓存实战的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于电商场景的高并发RocketMQ实战-Consumer端队列负载均衡分配机制、并发消费以及消费进度提交

    🌈🌈🌈🌈🌈🌈🌈🌈 【11来了】文章导读地址:点击查看文章导读! 🍁🍁🍁🍁🍁🍁🍁🍁 Consumer 端队列负载均衡分配机制 topic 是有一堆的 queue,而且分布在不同的 broker 上 并且在消费时,将多个 queue 分配给多个 consumer,每一个 consumer 会分配到一部分的 queue 进行消费

    2024年02月03日
    浏览(46)
  • 高并发缓存实战RedisSon、性能优化

    对于经常访问的数据保留在redis缓存当中,不用带数据设置超时时间定期删除控制redis的大小 缓存击穿数据库没有被击穿 如果商家是批量导入的数据,呢么就会同时存到redis中,设置固定的时间就会导致缓存在一瞬间失效,用户访问不到就会将流量打到数据库上造成数据库段

    2024年02月13日
    浏览(65)
  • 5. 一线大厂高并发缓存架构实战与性能优化

    本文是按照自己的理解进行笔记总结,如有不正确的地方,还望大佬多多指点纠正,勿喷。 课程内容: 1、中小公司Redis缓存架构以及线上问题分析 2、大厂线上大规模商品缓存数据冷热分离实战 3、实战解决大规模缓存击穿导致线上数据库压力暴增 4、黑客攻击导致缓存穿透

    2024年02月07日
    浏览(48)
  • 一线大厂Redis高并发缓存架构实战与性能优化

    我们都知道,一般的互联网公司redis部署都是主从结构的,那么复制基本都是异步执行的, 那就存在一个问题,当我们设置分布式锁的时候,还没来得及将key复制到从节点,主节点挂了,那么从节点会成为主节点,但是主节点的分布式锁key就会丢失掉,如果新线程进来执行同

    2024年02月08日
    浏览(47)
  • 【案例实战】高并发业务的多级缓存架构一致性解决方案

    我们在高并发的项目中基本上都离不开缓存,那么既然引入缓存,那就会有一个缓存与数据库数据一致性的问题。 首先,我们先来看看高并发项目里面Redis常见的三种缓存读写模式。 Cache Aside 优点 读取效率高,缓存命中率高,写操作与数据库同步,数据一致性较高,实现较

    2024年02月13日
    浏览(45)
  • 电商项目10:商品管理、仓库管理

    1.1.1、后端 spu检索接口文档 SpuInfoController SpuInfoService SpuInfoServiceImpl 查询时创建时间不是年月日时分秒类型。可以在全局配置文件中配置: 后端代码修改: SpuInfoServiceImpl 1.1.2、前端 前端调用时出现第一次进入页面。搜索时输入框条件未置空,且为0.是因为业务规则,传0就查

    2024年02月10日
    浏览(36)
  • 【go项目-geecache】动手写分布式缓存 day2 - 单机并发缓存

    [ Github- geecache ](luckly-0/geecache (github.com)) 收获总结: 了解接口的使用场景,它和函数之间的差别和优略势 测试文件要以_test结尾 系统设计要严谨,要考虑后期的拓展性和维护 ,比如load函数考虑到了分布式场景 数据结构之间的封装 sync.Mutex 互斥锁 如果我们要是实现并发缓存

    2023年04月18日
    浏览(92)
  • 8核16G的CentOS服务器,Spring boot undertow如何优化参数提高并发,电商项目

    对于运行在8核16GB内存的CentOS服务器上的Spring Boot电商项目,使用Undertow作为嵌入式服务器时,可以通过以下参数优化来提高并发性能: 1. 线程池配置 io-threads :IO线程数,负责处理非阻塞的网络IO。通常设置为与CPU核心数相等的值,即8。 worker-threads :工作线程数,处理阻塞操

    2024年04月25日
    浏览(46)
  • React2023电商项目实战 - 1.项目搭建

    古人学问无遗力,少壮工夫老始成。 纸上得来终觉浅,绝知此事要躬行。 —— 陆游《《冬夜读书示子聿》》 项目搭建 App登录及网关 App文章 自媒体平台(博主后台) 内容审核(自动) ⑴. 登录注册 ⑵. 商城 ⑶. 购物车 ⑷. 个人中心 登录、注册 商城:模糊搜索、属性筛选(多选

    2024年02月12日
    浏览(44)
  • Java项目:10 Springboot的电商书城管理系统

    作者主页:源码空间codegym 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 该系统分为前台展示和后台管理两大模块,前台主要是为消费者服务。该子系统实现了注册,登录,以及从浏览、下单到支付的整个流程,支付使用的是沙箱环境,属于模拟环

    2024年01月20日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包