业务场景: 需求是系统中有多个订单,多个处理员。先需要把这些订单平均分配给处理员处理,不要造成一个人多一个人少的情况;
实现方案:
在缓存中维护一个处理员的队列,或者集合,同时再维护一个自增的下标值
每次需要分配处理员的时候,从缓存中获取下标值,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);
}
以上是我自己的解决思路,如果各位大神有更好的解决方案,望分享给小弟,感谢!