目前我们在做一个审核后台,每天早上运营需要领取任务。领任务逻辑大致这样
// 1、先取数据
select * from data where status = xxx limit 50
// 2、写入任务表
insert into task .......
// 3、修改数据状态
update data set status = xxx where xxxx
但是!这样有个缺陷,如果多个人同时点领取,那么可能导致多个人领到同一条任务。目前想到的解决办法: 1、把这个操作写成一个事务,然后使用 serializable 隔离级别,保证每次只执行一个 2、把分任务的操作单独出来做出一个服务,使用单线程实现,保证每次只处理一个人的领取
但是这 2 种方法好像都有点影响性能,虽然我们后台没什么关系,但是本着对技术的追求,想来问问各位大佬,有没有什么更好的解决方案?