redis list实际应用:循环队列实现任务全自动运行

hello,大家好,今天10号了,很多人今天发工资了吧?不知道你们税是不是少交了几千块呢?反正我那少交100块零5毛的税还得等到15号 @-@。工资虽然少的可伶,但是班依然加不完啊,这不我刚下班,地铁一个小时,吃饭半个小时,休息半个小时,就这个点(23点)了。。。

这个点能干嘛呢?想找今日头条今天的文章量还没完成呢,要不然收入又要少了几分钱,不行不能浪费,可是我又不想随便写没行业质量的文章,思来想去许久(加班太累)没想到idea,刚好打开自己的支付宝-余额宝,看着那两三位数的余额:马云云我这每天0.07的收益你发着不闲累吗?于是我就开始胡思乱想了:要是我负责余额宝收益发放我会怎么做呢?

往自己账号里打个几千万。。。 。。。

转回正题:要是我负责余额宝收益发放我会怎么做呢? Java mysql mongodb, 啤酒 饮料 瓜子,nai子 妹子 钞票 崔永元... 哎有了redis,给余额宝的用户收益发放量我h不住,给我的粉丝每天发一次收益的量应该没问题。

redis list实际应用:循环队列实现任务全自动运行

用redis怎么做好呢,我们来盘点下问题的难点:

  • 收益派发失败了如何解决
  • 用户量太大
  • 用户量太大
  • 用户量太大

收益派发失败了如何解决

那我们先来解决第一个,高级的不会,简单版的idea还是有的:redis list(列表)实现循环队列+嗅探线程+消费线程 全自动化解决方案。

redis list实际应用:循环队列实现任务全自动运行

收益派发流程图

PS:普通消费线程(EarningDispatchTask)为定时任务,每天凌晨6点开始执行,简单实现代码如下:

/**

* 收益派发线程任务类

*/

public class EarningDispatchTask {

//假装注入

RedisService redisService;

public void dispatch(){

try {

dispatchService.doDispatch();

} catch (Exception e) { redisService.lpush("listKey", "failData"); }

}

}

嗅探线程为定时任务,每半小时执行一次,简单实现代码如下:

/**

* 嗅探线程(增量收益派发任务类)

*/

public class EarningIncrementSchedule {

//假装注入

RedisService redisService;

@PostConstruct

public void init(){

taskExecutor.execute(() -> {

Lock lock = EarningHelper.reDispatchLock;

Condition condition = EarningHelper.reDispatchCondition;

lock.lock();

try {

long len = redisService.Llen("listKey");

if(len > 0L){ condition.signal(); }

} finally { lock.unlock(); }

});

}

}

增量消费线程为定时任务,简单实现代码如下:

/**

* 增量收益派发任务类

*/

public class EarningIncrementDispatchTask {

//假装注入

RedisService redisService;

@PostConstruct

public void init(){

taskExecutor.execute(() -> {

Lock lock = EarningHelper.reDispatchLock;

Condition condition = EarningHelper.reDispatchCondition;

while(true){

lock.lock();

try {

while (0 == redisService.llen("listKey") { condition.await(); }

String redisData = redisService.lPop("listKey");

dispatchService.doDispatch();

} finally { lock.unlock(); }

}

});

}

EarningHelper为辅助类,以ReentrantLock实现,:

redis list实际应用:循环队列实现任务全自动运行

接下来解决第二、三、四个问题:

数据量太大

呃,不是我说,就余额宝那每天的收益派发量,十个我也搞不定 @-@

这不文章还没写完,过了12点了,还写个毛啊。(此处省略好多字)。

文章最后皮一下:要是我负责余额宝收益发放我会怎么做呢? 答:不敢想,如果是你,你会怎么做呢?

谢谢大家的观看,good night


分享到:


相關文章: