后端必须掌握的幂等性设计:从重复请求到系统稳定
一个重复请求是如何让系统崩溃的在实现秒杀/下单接口时,我发现一个很棘手的问题: 用户重复点击、网络重试、消息重复消费,都会导致同一请求被执行多次。一旦这些操作被执行多次,相应的数据在数据库就会保存多份,一下就带来了极大的后果。 于是我开始思...从0实现分片上传:断点续传 + 秒传 + 合并全解析
为什么需要分片上传在做文件上传功能时,最初我采用的是最简单的方案:前端通过一个 HTTP 请求,将完整文件直接上传到服务端。 测试时,我在上传一个3MB的照片时就报错了。按理说,这个才3MB,已经很小了,还是上传失败了。 后来我找到了错误原因,竟是m...秒杀系统最致命的问题:库存扣了,订单没了怎么办?
Redis + Lua扣库存就安全了….吗?在电商秒杀场景中,我们可能会用到Redis + Lua脚本判断秒杀资格、Redis预扣减库存和Redis Stream异步生成订单的秒杀方案。 我们先把链路拆开看: 1Redis 扣库存 → 发送 MQ...Kafka消息丢了怎么办?从重试到DLQ的完整可靠性设计
可靠性问题我们的业务在引入消息队列后,它确实带了给我们便利,但我们也就不得不面对它带来的问题:发送消息失败怎么处理呢?特别是我们的业务跟金融相关,消息处理不当就会给我们和客户带来巨大损失。因此解决消息队列的可靠性问题迫在眉睫。 今天,我们就以电商秒杀...解决缓存击穿:单例模式中的双重检测锁
问题背景我们都知道,在某种突发大流量的情景下,如果访问数据库的线程过多,会直接让数据库宕机。 这是我们可能会想到:Redis 的性能那么高,用 Redis 分担一下数据库的压力不久好了吗? 当然,这种办法确实为一种不错的思路,我们可以看一下这种思路的...情侣空间使用手册
简介 网址:http://81.71.75.53/ 一个类似于情侣空间的网站。实现了用户注册登录,用户中心,恋爱时间线,共享相册功能等功能。 该项目为前后端分离项目。 前端基于Ai生成,采用的VUE框架。 后端使用Java,采用SpringBoot...浅谈Synchronized:偏向锁,轻量级锁和重量级锁及底层原理
锁的概述线程安全问题: 在并发环境下,由于线程各自私有的内存不共享,当多个线程修改同一份公有的内存数据时就可能会出现数据不一致的问题。 Java中的锁: 按实现方式分类: Java中一般有两个实现的锁,分别是内置锁Synchronized(JVM实...面向对象:封装,继承,多态的艺术
面向对象 面向对象是什么?和面向过程有什么区别? 面向过程(Procedure Oriented) : 核心思想: 自顶向下,逐步细化。将问题拆解成一个个函数(动作),然后按顺序执行。 举例: 比如我想把大象装进冰箱。 面向过程思考的是:“第一步怎...Redis存储Token实现短信登录方案
登录流程 实现登录功能 Controller UserController12345678910@PostMapping("/code") public Result sendCode(@RequestParam("...从源码看HashMap:JDK 7到JDK 8的HashMap的优化
HashMap,哈希表,一种存储键值对的数据结构。 JDK 7 的 HashMap的结构JDK 7 的HashMap底层结构十分简单:数组 + 链表。示意图: 1234567table[] | v[0] -> Node -> ...