情况是有两台服务器同时运行程序,然后是一个抽奖程序,奖品的数量是有限制的(每一种奖品每天发放多少,一共发放多少都是有数的超过就不在发放,剩下的概率为零).
1.怎么样避免数据重复插入
2.怎样避免多发或者少发
因为以前出现过类似的情况,能力有限,所以希望有一个好的解决办法?请帮忙梳理一下流程
放进消息队列?用消费者-生产者模式
两种解决方向:
1.分布式 每天将数据平均分到两个服务器 使得两台服务器的数据没有交叉 晚上在归并 第二天再平均分发
2.将数据放在一台服务器上,加同步锁即可
可以用多线程处理
在抽奖的方法上加上synchronized同步关键字
比如你抽奖的奖品是一个集合a 你每天早晨就把a分为两个子集合b c 且b&c=a 服务器1抽奖的时候从b中选择数据 服务器2抽奖的时候从c中选择数据
晚上的时候把b c剩下的合并起来成为第二天的a
当然这个同步时间 你可以自由选择 一天 或者一个小时