【分布式锁】并发场景下的数据插入

分布式锁:场景和使用方法(通俗讲解) 对于锁大家肯定不会陌生,比如 synchronized 关键字 和 ReentrantLock 可重入锁,一般我们用其在多线程环境中控制对资源的并发访问。但是随着业务的发展,分布式的概念逐渐出现在我们系统中,我们在开发的过程中经常需要进行多个系统之间的交互,于是上面的加锁方法就会失去作用。于是在分布式锁就自然而然的诞生了,接下来我们来聊一聊分布式锁实现的几种方式。 阅读详情

并发场景下的数据插入

假设有这样一种场景,B为A做商品推销,A需要给B提供佣金,每推销成功一笔就要记录一笔佣金,假设每次记录的流水号为requestId,显然,每次推销成功一笔只能记录一次佣金,不然就会造成重复记录,给A造成经济损失。根据业务需求,可知requestId必然唯一。但是如果多个操作员同时为B记录佣金,就可能发生重复记录的问题,如何规避呢?

分析

假设有Tom和Jerry两个操作员,如果他们在同一台服务器上记录,显然可以通过加synchronized锁来规避重复计佣的风险。但是如果在不同的服务器上操作,我们都知道,synchronized是对象锁,不同的服务器必然是不同的对象,这时肯定失效。所以这里就需要引入分布式锁。

解决

  1. MySQL层
    首先分布式锁从底层的层面去分析的话,将requestId设置为唯一索引是可行的,但是需要注意两点:1)此时代码中需要显式的抛出DuplicateKeyException异常,否则如果重复插入会报异常,我们想要做的只是重复插入不去记录,并不想报错。2)唯一索引维护比较麻烦,删除的话一般选择物理删除,只是逻辑删除可能对未来业务扩展带来影响。
  2. 但是一般高并发场景都是尽量将请求拦截在最上游,这里可以通过ZK做分布式锁,也可以通过Redis锁,这里单介绍Redis。Redis的分布式锁比较简单,就是setnx()方法,即set if not exists,只会在键不存在的时候才会插入操作,而且Redis基于内存,响应很快,对于Tom和Jerry两个请求,必然只有其中一个请求到锁,执行插入操作。但是Redis往往是基于高并发(类似于一秒几千到上万个请求)的情况,正常操作用唯一索引就好。
  3. Zookeeper待补充。
    欢迎各位有志之士共同学习进步。
使用广播星历进行 GPS 卫星位置的计算 目录1.计算卫星运动的平均角速度 n2.计算观测瞬间卫星的近地点角3.计算偏近点角4.计算真近点角 f5.计算升交角距 6.计算摄动改正项7.进行摄动改正 8.计算卫星在轨道面坐标系中的位置9.计算观测瞬间升交点的经度 L10.计算卫星在瞬时地球坐标系中的位置11.计算卫星在协议地球坐标系中的位置使用广播星历进行GPS卫星位置的计算的详细步骤如下:关于在广播星历中各参数的分布情况可以参考下图:首先根据广播星历中给出的参数 计算参考时刻(TOE) 的平均角速度 式中,GM为万有引力常数 G 与地球总质量 阅读详情

相关推荐

qupath再度更新:使用WSInfer进行深度学习

我们在下面提供了一个示例,说明如何使用 WSInfer 创建 WSI 中肿瘤和肿瘤浸润淋巴细胞 (TIL) 的空间图谱,这些图谱被认为在几种癌症中既有预后又有预测意义6,10,11,12.由于 WSI 非常大,因此它们通常被分解为补丁,以使分析变得可行。补丁分类的输出通常是空间分类地图,通常可以跨 WSI 集成,以创建表示该幻灯片的诊断、预测或“分数”的单个输出。在当前的实施中,我们专注于斑块分类的通用任务,该任务广泛用于广泛的病理学应用,具有促进诊断、预后或预测功能的深度学习模型。

hx2024的博客 2200

通俗讲解分布式锁:场景和使用方法

点击关注公众号,实用技术文章及时了解前言对于锁大家肯定不会陌生,比如 synchronized 关键字 和 ReentrantLock 可重入锁,一般我们用其在多线程环境中控制对资源的并发...

Java知音 2116

三轴云台稳定控制算法优化实战:从PID到模糊自适应

本文深入探讨了三轴云台稳定控制算法的优化实践,从经典PID控制到模糊自适应算法的进阶应用。通过实战案例和代码示例,详细解析了PID调参技巧、模糊控制实现及多传感器数据融合方法,帮助工程师在复杂环境下提升云台抗干扰能力和响应速度,特别适用于无人机航拍等场景。

green的博客 911

开发中什么场景使用分布式锁

在分布式事务中,需要保证不同节点对共享资源的访问是互斥的,否则可能会导致数据不一致的问题,此时可以使用分布式锁来保证在事务执行过程中,各个节点之间对共享资源的访问是互斥的。需要注意的是,分布式锁是一种非常重要的机制,但同时也会带来一定的性能开销和复杂度,因此在使用分布式锁时需要权衡系统的性能和可维护性,以及使用分布式锁所带来的成本和风险。在分布式缓存中,需要保证各个节点对缓存的访问是互斥的,否则可能会导致缓存中的数据不一致,此时可以使用分布式锁来保证各个节点对缓存的访问是互斥的。

qq_34486648的博客 2580

硬件原理图:从软件思维到硬件接口的嵌入式开发破局指南

本文为软件开发者提供了读懂硬件原理图的嵌入式开发破局指南。文章将硬件原理图类比为“硬件系统的架构图”,引导读者将软件API调用思维迁移到硬件接口理解上,详细解析了电阻、电容、二极管等常见元器件的“硬件API”功能与选型逻辑,并通过实战电路拆解,阐述了从原理图分析到驱动代码编写的完整思维链条,帮助开发者建立软硬件协同的系统级视角。

lg888的博客 496

想在瑞芯微RK3588上跑视频分类模型?避开3D卷积这个坑,试试这几种NPU友好的方案

本文探讨了在瑞芯微RK3588上部署视频分类模型时如何避开3D卷积的性能陷阱,提供了三种NPU友好的替代方案:MobileNetV2+GRU组合、Temporal Shift Module(TSM)和帧级池化。这些方案在保持较高准确率的同时,充分利用RKNPU的硬件加速能力,显著提升推理效率。文章还分享了从模型转换到部署优化的完整流程和实战经验。

weixin_28724319的博客 418

分布式锁使用场景以及实现方式

的意思是,配菜,炒菜,传菜上桌的工作都串行的放在同一个队列里(这里同等于微服务调用中,将同一个竞态资源的操作交给同一台服务器同一个线程操作。),交给同一个线程去处理所有的操作。时,顾客的点了一盘菜,切菜员切好了菜,交给另外的线程处理,另外的线程去争抢这些菜,争抢到的线程炒这盘菜,炒好后,又给其他线程,其他线程再来抢夺这盘菜,将它端上桌,这里面涉及多个锁的释放和加锁,线程的上下文切换。1.Redis主从采用异步复制,如果主宕机,切换到从后,会导致部分锁的数据丢失,多个进程或得到同一把锁。

Anakki的博客 1883

JasperReport制作行内容合并的表格

效果图: 实现思路一: 交叉表 另一个思路: 普通表格 缺点:无法实现内容 垂直居中显示 准备工作 一、数据准备 DROP TABLE IF EXISTS `address_item_sex_value`; CREATE TABLE `address_item_sex_value` ( `id` int(11) NOT NULL AUTO_INCREM...

weixin_34148456的博客 2468

分布式锁常见使用场景与问题解决办法

1、Redis的分布式锁,如setnx key value ex 10s,常见使用Redisson框架。1、加锁,没有释放锁。需要加释放锁的操作,比如delete key。2、加锁后,程序还没有执行释放锁,程序挂了。需要用key的过期机制。1、系统是一个分布式系统,集群部署,Java的锁已经锁不住了。3、基于数据库,比如MySQL。2、操作共享资源,比如库里唯一的用户数据。3、同步访问,即多个进程同时操作共享资源。2、基于Zookeeper。一、常见的分布式锁使用场景。二、分布式锁解决方案。

怀揣梦想,一颗执着于技术的心从未磨灭,内心住着一颗顽强的小强时刻提醒自己层层突破自我,同时也成就他人 673

从一只龙虾到一支团队:OpenClaw 单 Bot 多 Agent 配置实践

单 Bot 多 Agent只有一个对外的聊天入口(飞书 Bot)内部有多个独立的 AI Agent,各司其职主 Agent(总指挥)负责接收任务并分配给子 Agent子 Agent 完成任务后将结果返回给主 Agent角色Agent ID职责使用场景🎯 总指挥main-agent统筹协调,任务分发接收所有用户请求✍️ 笔杆子内容创作公众号、博客、小红书🔬 参谋canmou深度研究竞品分析、市场调研📋 运营官operations运营管理邮件、日历、社交媒体。

Maynor的博客 1081

Deepfake检测模型-PyDeepFakeDet项目复现实验报告-深度学习

该实验是对于https://github.com/wangjk666/PyDeepFakeDet模型的复现。PyDeepFakeDet 是一款集成的、可扩展的 Deepfake 检测工具。目标是提供最先进的 Deepfake 检测模型以及用于在常用 Deepfake 数据集上训练和评估新模型的接口。

一位不是很硕的鉴伪方向硕士 5495

redis实现分布式锁解决高并发场景下数据重复插入问题

问题产生 :项目需要和硬件打交道某天出现合作厂商出现bug 重复数据多进程同时推送(10毫秒内推送多条) 本来代码中设置了去重

weixin_42368421的博客 2143

复现论文《基于Retinex理论和深度学习的低照度图像增强算法研究》

本研究提出两种基于Retinex理论和深度学习的低照度图像增强算法。第一种算法在HSV色彩空间中进行处理,采用Res2Block和CBAM-Res2block模块增强多尺度特征表示;第二种算法使用多尺度残差U型网络结构。复现代码展示了Res2Block、CBAM注意力机制等核心模块的实现,包括多尺度特征提取、通道和空间注意力机制。实验结果表明,所提算法能有效解决低照度图像存在的亮度低、对比度不足、颜色失真和细节丢失等问题,显著提升图像质量。

max500600的博客 389

高并发下关于利用redis分布式锁实现插入数据唯一性 (业务场景: 先根据条件查询数据库 若没有则新增 有则直接返回结果)的加锁注意事项

高并发下关于利用redis分布式锁实现插入数据唯一性 (业务场景: 先根据条件查询数据库 若没有则新增 有则直接返回结果)的加锁注意事项 加锁不能像下面这样加 伪代码如下: fun(){ *lock;* val data= 根据条件去查询db 获取结果; if(data不存在){ 插入数据 data=插入数据; } *unlock;* 返回 data; } 向上面这样加锁 在极端情况下 会导致还是会导致重复插入; 在java的事务管理器中 提交事务的时机是在这个方法结束的时候再提交的。像

qq_41082092的博客 1022

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

高并发场景下数据重复插入的问题

高并发场景下,数据库经常会发生数据重复插入的问题,这时候单单在插入前,查询数据库,判断是否存在,再进行插入,往往不能保证数据唯一性。 查询数据库判断是否存在 测试代码: th_insert_test.py 每次插入前,去数据库查询,要插入的 User0-9 是否存在,若不存在则插入,若存在,则返回已经有。 #-*- coding:utf8 -*- def db_op_thread_func...

Leon的博客 2万+

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

并发插入

引用:https://my.oschina.net/zhanglikun/blog/861474 大并发场景中,写入数据库操作经常遇到的一个问题是重复数据插入问题。假设接口服务接收到三个插入数据请求,实际三个请求要插入的数据是同一份数据(部分核心字段构造惟一条件),这个时候常规做法很难保证数据不重复插入。 常规做法是,插入数据之前,查询数据库,判断数据是否存在,不存在则插入。 ...

Nobe_Chan的博客 1380

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

如何解决高并发场景下的插入重复 及 乐观锁和悲观锁介绍

1.如何解决高并发场景下的插入重复 高并发场景下,写入数据库会有数据重复问题 使用数据库的唯一索引,就是不允许某些字段重复,如果重复数据库就会抛出一个异常出来,这样就知道那些数据重复了,直接把这个异常忽略掉就可以,这样就可以实现非重复插入。虽然好用但有些场景没有办法实现,如已经做了分库分表,这个时候就要使用队列去执行一个异步写入。 使用队列异步写入,其实很多高并发问题都可以通过缓...

晓康的博客 3909

插入或者更新的并发情况处理

最近接收的代码经常出现并发问题。操作分为两步,第一步查询是否存在,如果不存在插入,存在更新。 关键是查询判断和后面的插入或者更新不是原子操作,如果判断之后,其他线程进行了插入操作,抛出唯一key异常。 private void insertOrUpdateCaseExpand(RobotCaseUpdateDTO updateDTO, RobotAddPaymentDTO addPa...

Just Do It! 2102

解决大并发场景下数据重复插入

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34018202的博客 483

DuplicateKeyException: Java 中组合唯一索引的并发插入问题及其解决方案

组合唯一索引在确保数据完整性方面至关重要,但在高并发场景中,容易导致唯一性约束冲突。通过乐观锁、重试机制、以及消息队列等策略,可以有效缓解这些问题。根据具体的业务场景,选择合适的解决方案将有助于提高应用的性能和用户体验。希望本文能为您解决组合唯一索引并发插入的问题提供有价值的见解和参考。欢迎讨论与分享!

十一逐星的博客 1637

postgresql批量插入数据脚本_互联网典型技术应用场景---批量插入数据

我们经常会遇到新增数据,一次增加的量会比较大的情况,都会进行批量的插入数据,insert into A(id,key1,key2,key3..)values(...),会进行一次大批量的插入操作。如果id不会重复,而且表A,仅仅是以,id为主键,其他唯一性索引没有的情况,这种插入操作不会有问题,但是当A中出现唯一性索引,(key1,key2,key3)的时候,那么在高并发的插入操作中,就...

weixin_39636333的博客 213

灵活运用分布式锁解决数据重复插入问题

一、业务背景 许多面向用户的互联网业务都会在系统后端维护一份用户数据,快应用中心业务也同样做了这件事。快应用中心允许用户对快应用进行收藏,并在服务端记录了用户的收藏列表,通过用户账号标识OpenID来关联收藏的快应用包名。 为了使用户在快应用中心的收藏列表能够与快应用Menubar的收藏状态打通,我们同时也记录了用户账号标识OpenID与客户端本地标识local_identifier的绑定关系。因为快应用Manubar由快应用引擎持有,独立于快应用中心外,无法通过账号体系获取到用户账号标识,只能获取到客

leeta的博客 483

常见面试题:Java多线程并发数据错乱了,接口幂等性如何设计?

业务背景 今天给大家聊聊线上系统的接口幂等问题,以及如何通过分布式锁来保障接口的幂等性,同时会给大家分享一下我们在基于分布式锁实现接口幂等性的时候,一些生产实践经验的积累。 首先给大家说说,假如说要是我们线上系统的核心接口要是没有幂等性保障机制的话,可能会出现什么情况? 其实非常简单,假设你有一个系统,他有一个接口,这个接口接受请求的时候假设会在数据库里插入一条数据,正常情况下一个用户对这个接口发起一次请求应该就只有一条数据,结果可能某一天你会发现这个用户通过这个接口插入了多条数据。 如下图 1 所

HongYu012的博客 1271

如何运用分布式锁解决数据重复插入问题

作者:快应用服务器研发团队-Lin Yupan一、业务背景许多面向用户的互联网业务都会在系统后端维护一份用户数据,快应用中心业务也同样做了这件事。快应用中心允许用户对快应用进行收藏,并在服...

weixin_45583158的博客 872

Java并发编程必备:分布式锁的选型和性能对比

当涉及到分布式系统中的并发控制和数据一致性时,分布式锁是一种常见的解决方案。下面我将对几种常见的分布式锁实现原理、实现示例、应用场景以及优缺点进行详细分析。

m0_71777195的博客 275

利用锁和CAS算法:解决并发下数据库的一致性问题(事务)

背景 ​ 最近有一个场景遇到了数据库的并发问题。现在先由我来抽象一下,去掉不必要的繁杂业务。 ​ 数据库表book存储着每本书的阅读量,一开始数据库是空的,不存在任何的数据。当用户访问接口的时候,判断表book是否存在此书的记录,如果不存在,即插入一条新记录,而且阅读量设置为1;当下个用户再阅读此书时,再调用接口就直接将此书的阅读量增加1,而不用再插入新记录。 并发下出现的问题 ​ 下面看一...

非专业技术员的博客 565
上一篇: (转)MyBatis的Mapper接口以及Example的实例函数及详解
下一篇: 【MySQL】深入理解为什么MySQL使用B+树
少侠露飞
博客等级 码龄9年 214粉丝 117原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值