当前位置:首页 > 编程笔记 > 正文
已解决

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

来自网友在路上 163863提问 提问时间:2023-11-11 21:23:57阅读次数: 63

最佳答案 问答题库638位专家为你答疑解惑

【技巧】并发读取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判断 如果超时的 可以去释放锁  比如超时半个小时等

查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"【技巧】并发读取Mysql数据保证读取到的数据不重复":http://eshow365.cn/6-37932-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!