分布式事务的解决方案 在分布式系统中,事务的ACID特性(原子性、一致性、隔离性、持久性)面临着巨大的挑战。传统的关系型数据库事务在分布式场景下往往难以适用,因此,各种分布式事务解决方案应运而生 两阶段提交(2PC) 两阶段提交是一种分布式事务协议,用于确保分布式系统中的事务一致性。它通过协调参与者节点的操作来实现分布式事务的提交或回滚 在第一阶段(准备阶段),事务协调器向所有参与者节点发送准备请求,并等待它们 2024-06-14 技术经验
延时队列 使用场景延时队列是一种特殊类型的队列,允许元素在特定时间间隔后才能被处理。这种队列在处理具有延迟需求的任务时非常有用,例如定时任务、事件驱动系统等。 有以下使用场景 订单在30分钟之内未支付则自动取消 重试机制实现,把调用失败的接口放入一个固定延时的队列,到期后再重试 新创建的店铺,如果在十天内都没有上传过商品,则自动发送消息提醒 用户发起退款,如果三天内没有得到处理则通知相关运营人员 2024-06-10 技术经验
Java中的各种锁 乐观锁 参考文章: http://t.csdnimg.cn/nvUS3 https://www.cnblogs.com/lifegoeson/p/13683785.html 2024-06-02 技术经验
Java中的关键字 关键字:Java语言自己用到的一些词,有特殊作用,不能将其作为类名和变量名,关键字的概念也包含特殊直接量,保留字 Java目前一共有53个关键字:48个关键字+3个特殊直接量+2个保留字 48个关键字:abstract、assert、boolean、break、byte、case、catch、char、class、continue、default、do、double、else、enum、exten 2024-05-23 Java #Java
Spring Boot中的六种API请求参数读取方式 @RequestParam用来加载URL中?之后的参数。 比如:这个请求/user?name=zheng 就可以如下面这样,使用@RequestParam来加载URL中的name参数 12345@GetMapping("/user")@ResponseBody()public User findUserByName(@RequestParam("name") 2024-05-15 框架和中间件 #Java
缓存和数据库一致性 业务背景 为了满足用户对一趟列车不同站点不同座位类型的余量查询需求,我们采取了一种优化方案。我们将这些余量信息存储在缓存中,以便用户可以快速查询。 然而,在用户创建订单并完成支付时,我们需要同时从数据库和缓存中扣减相应的列车站点余票。这种设计不仅提高了查询效率,也保证了数据的一致性,确保订单操作的准确性。 1. 先写缓存再写数据库两个用户购买了车站余票,假设余票有 17 张,两个用户扣 2024-05-02 技术经验 #redis
注册用户如何防止缓存穿 1. 缓存穿透缓存穿透是指在使用缓存系统时,恶意或频繁地请求一个不存在于缓存中的数据,导致每次请求都需要查询数据库或其他数据存储系统,从而绕过了缓存的效果,严重影响系统性能。 这种情况通常发生在恶意攻击、大量请求缓存中不存在的数据或缓存数据过期后的高并发访问。 缓存穿透会导致以下问题: 频繁的查询数据库或其他数据存储系统,增加了数据库负载,降低了系统的吞吐量。 大量的缓存不存在的数据请求可能会导 2024-04-23 技术经验 #redis
责任链模式 1. 什么是责任链模式避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止 举个例子,SpringMvc 中可以定义拦截器,并且可以定义多个。当一个用户发起请求时,顺利的话请求会经过所有拦截器,最终到达业务代码逻辑,SpringMvc 拦截器设计就是使用了责任链模式 在责任链模式中,多个处理器(参照上述拦截器)依次处理同 2024-04-15 技术经验 #设计模式
从0开始实现一个简单的增删改查 题目1234567891011121314create table t_requirement ( i_require_id BIGINT primary key auto_increment not null comment '需求标识', s_title VARCHAR(256) comment '需求 2024-04-13 技术经验 #Java
RabbitMQ 再一次学习和巩固RabbitMQ的知识,这次学习参考的视频是黑马RabbitMQ 一. MQ基础1. 初步认识MQ同步调用 同步调用是最基本并且最简单的一种调用方式,类 A 的 a() 调用类 B 的 b(),一直等待 b() 执行完毕,a() 继续往下走。该调用方式适用于 b() 执行时间不长的情况,因为 b() 执行时间过长或者直接阻塞的话,a() 的余下代码是无法执行下去的,这样会造成整个 2024-03-26 框架和中间件 #RabbitMQ