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


分享到:


相關文章: