需求:
1.我们要求任务处理服务要做到高可靠性,因此需要搞成多机分布式服务,即使一个服务挂了,还有别的服务可以使用可以处理
2.保障各个服务均可以同时拿到数据进行高效处理
3.数据不能重复处理...方式一.悲观锁形式:事务+select for update
本文先提供一个没有采用的方式--采用事务加select for update的形式
1.开启事务
2.从task表里selce for update...锁定一批数据
3.处理数据
4.更新这批task
5.提交事务
这么做呢就有个非常严重的问题,---同一时刻只有一个有效服务
如果A系统拿到了数据,开始了事务但是没提交,那么B系统同样的条件也会查到同一批还没处理好提交的数据...方式 (无锁,我们目前采用的方式)
步骤解释:
0.数据库里增加一个字段lockkey
1.先去数据库拿小于等于当前时间的一批status为1(待发送)的数据
2.根据这批数据的id ids更新这批数据为...但是我们目前没有用这种方案,原因是...目前我们redis内存只申请到一个比较小的内存,而zset采用的跳跃表结构虽然保障了数据查询非常快速,但是也非常占用内存,预估了一下按照我们的数据量起码要存储300