平均分配算法

业务场景: 需求是系统中有多个订单,多个处理员。先需要把这些订单平均分配给处理员处理,不要造成一个人多一个人少的情况;

实现方案:

在缓存中维护一个处理员的队列,或者集合,同时再维护一个自增的下标值

每次需要分配处理员的时候,从缓存中获取下标值,get(下标值)的方法来分配处理员;

当下标值等于处理员队列的长度时,则将该下标值置为 0,重新计算下标。类似于负载均衡的轮询方法 (下标值也可以不用置 0,始终递增,而下标则为下标值对处理员队列 size 取余。)

缓存下标值利用Redis INCR命令

代码实现:

LinkedList<User> users = new LinkedList<>();
User user1 = new User();
userDoctor1.setName("yu");
User user2 = new User();
user2.setName("dang");
User user3 = new User();
user3.setName("sun");
User user4 = new User();
user4.setName("ma");
User user5 = new User();
user5.setName("zhao");
users.add(user1);
users.add(user2);
users.add(user3);
users.add(user4);
users.add(user5);
if(users.size()>0){
    //ince自增1获取下标
    long averUser = redisUtil.incr("aver_test", 1);
    //当下标达到处理员人数时,下标设置为0 userNames为缓存的队列
    if(averUser == userNames.size()){
        redisUtil.del("aver_test");
    }
    String name = userNames.get(Convert.toInt(averUser-1)).getName();
    System.out.println(name);
}

以上是我自己的解决思路,如果各位大神有更好的解决方案,望分享给小弟,感谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值