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

【技巧】并发读取Mysql数据保证读取到的数据不重复

【技巧】并发读取Mysql数据保证读取到的数据不重复

使用场景:

        并发场景下, 保证不获取到重复的数据

思路: 先通过 MYSQL锁 去占位打标识,然后再去取数据 

        相当于几个人抢蛋糕, A先把蛋糕打上记号 蛋糕是A的, 然后再慢慢吃

表结构

表 t_userid
name
val
used_flag    是否使用过
lock_token   锁标识默认0
lock_token_time    加锁时间   方便超时之后释放锁

1 加锁

-- 生成随机加锁token = 123456
UPDATE t_user u
SET u.lock_token = 123456, u.lock_token_time = NOW()WHERE u.id IN (
SELECT id FROM (
SELECTid 
FROMt_user 
WHERE
-- 未被使用过used_flag = 0 
-- 未被加锁AND lock_token = 0
-- 这里限制每次取多少条数据, 取决于业务LIMIT 10
-- 上锁FOR UPDATE) a
)

2 获取

SELECT * FROM t_user u
WHERE -- 未被使用过used_flag = 0 
-- 指定的token锁AND lock_token = 123456

补充, 可以通过lock_token_time判断 如果超时的 可以去释放锁  比如超时半个小时等

http://www.lryc.cn/news/222223.html

相关文章:

  • Lavarel异步队列的使用
  • JVM知识分享(PPT在资源里)
  • 整合Salesforce Org需要避免的3大风险
  • viple进阶3:打印不同形状的三角形
  • pytest+yaml实现接口自动化框架
  • 编译器使用优化后出现的busfault
  • rebase current onto selected作用
  • 深度学习入门
  • 嵌入式图像处理机器视觉库YMCV使用
  • vscode设置pycharm中的项目路径和debug方法
  • 10-27 maven概念
  • SQL审计是什么意思?目的是什么?有什么好处?
  • CSS 网页布局
  • 智慧燃气管网监测系统功能简要介绍
  • 深度解析:如何开发一对一交友App的关键要素和流程
  • ClickHouse 学习之从高级到监控以及备份(二)
  • 「随笔」IT行业哪个方向比较好就业
  • Halcon WPF 开发学习笔记(0):开篇介绍
  • SLAM中求导相关的公式总结
  • 在微信小程序中怎么做投票活动
  • 如何使用 NFTScan NFT API 在 Arbitrum 网络上开发 Web3 应用
  • 线上问题排查方法
  • 智能柜+MRO:制造业中的自动售货机
  • flutter笔记:骨架化加载器
  • 关于视频封装格式和视频编码格式的简介
  • npm发布自己的包
  • 【漏洞复现】weblogic-10.3.6-‘wls-wsat‘-XMLDecoder反序列化(CVE-2017-10271)
  • CRM中的销售机会管理是什么?三个步骤帮你创建销售渠道
  • X(原Twitter)怎么发推文最有效?技巧分享
  • Ionic 模块组件的理解