婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > redis實現延時隊列的兩種方式(小結)

redis實現延時隊列的兩種方式(小結)

熱門標簽:鄭州人工智能電銷機器人系統 日本中國地圖標注 十堰營銷電銷機器人哪家便宜 山東外呼銷售系統招商 魔獸2青云地圖標注 北京400電話辦理收費標準 宿遷便宜外呼系統平臺 貴州電銷卡外呼系統 超呼電話機器人

背景

項目中的流程監控,有幾種節點,需要監控每一個節點是否超時。按傳統的做法,肯定是通過定時任務,去掃描然后判斷,但是定時任務有缺點:1,數據量大會慢;2,時間不好控制,太短,怕一次處理不完,太長狀態就會有延遲。所以就想到用延遲隊列的方式去實現。

一,redis的過期key監控

1,開啟過期key監聽

在redis的配置里把這個注釋去掉

notify-keyspace-events Ex

然后重啟redis

2,使用redis過期監聽實現延遲隊列

繼承KeyExpirationEventMessageListener類,實現父類的方法,就可以監聽key過期時間了。當有key過期,就會執行這里。這里就把需要的key過濾出來,然后發送給kafka隊列。

@Component
@Slf4j
public class RedisKeyExpirationListener extends KeyExpirationEventMessageListener {

  @Autowired
  private KafkaProducerService kafkaProducerService;

  public RedisKeyExpirationListener(RedisMessageListenerContainer listenerContainer) {
    super(listenerContainer);
  }

  /**
   * 針對 redis 數據失效事件,進行數據處理
   * @param message
   * @param pattern
   */
  @Override
  public void onMessage(Message message, byte[] pattern){
    if(message == null || StringUtils.isEmpty(message.toString())){
      return;
    }
    String content = message.toString();
    //key的格式為  flag:時效類型:運單號 示例如下
    try {
      if(content.startsWith(AbnConstant.EMS)){
        kafkaProducerService.sendMessageSync(TopicConstant.EMS_WAYBILL_ABN_QUEUE,content);
      }else if(content.startsWith(AbnConstant.YUNDA)){
        kafkaProducerService.sendMessageSync(TopicConstant.YUNDA_WAYBILL_ABN_QUEUE,content);
      }
    } catch (Exception e) {
      log.error("監控過期key,發送kafka異常,",e);
    }
  }
}

可以看的出來,這種方式其實是很簡單的,但是有幾個問題需要注意,一是,這個盡量單機運行,因為多臺機器都會執行,浪費cpu,增加數據庫負擔。二是,機器頻繁部署的時候,如果有時間間隔,會出現數據的漏處理。

二,redis的zset實現延遲隊列

1,生產者實現

可以看到生產者很簡單,其實就是利用zset的特性,給一個zset添加元素而已,而時間就是它的score。

public void produce(Integer taskId, long exeTime) {
  System.out.println("加入任務, taskId: " + taskId + ", exeTime: " + exeTime + ", 當前時間:" + LocalDateTime.now());
  RedisOps.getJedis().zadd(RedisOps.key, exeTime, String.valueOf(taskId));
}

2,消費者實現

消費者的代碼也不難,就是把已經過期的zset中的元素給刪除掉,然后處理數據。

public void consumer() {
  Executors.newSingleThreadExecutor().submit(new Runnable() {
    @Override
    public void run() {
      while (true) {
        SetString> taskIdSet = RedisOps.getJedis().zrangeByScore(RedisOps.key, 0, System.currentTimeMillis(), 0, 1);
        if (taskIdSet == null || taskIdSet.isEmpty()) {
          System.out.println("沒有任務");
 
        } else {
          taskIdSet.forEach(id -> {
            long result = RedisOps.getJedis().zrem(RedisOps.key, id);
            if (result == 1L) {
              System.out.println("從延時隊列中獲取到任務,taskId:" + id + " , 當前時間:" + LocalDateTime.now());
            }
          });
        }
        try {
          TimeUnit.MILLISECONDS.sleep(100);
        } catch (InterruptedException e) {
          e.printStackTrace();
        }
      }
    }
  });
}

可以看到這種方式其實是比上個方式要好的。因為,他的那兩個缺點都被克服掉了。多臺機器也沒事兒,也不用再擔心部署時間間隔長的問題。

總結

兩個方式都是不錯的,都能解決問題。碰到問題,多思考,多總結。

到此這篇關于redis實現延時隊列的兩種方式(小結)的文章就介紹到這了,更多相關redis 延時隊列內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • golang實現redis的延時消息隊列功能示例
  • 使用Redis實現延時任務的解決方案
  • 利用Redis實現延時處理的方法實例

標簽:果洛 朝陽 吉安 江蘇 臺州 大慶 北京 楊凌

巨人網絡通訊聲明:本文標題《redis實現延時隊列的兩種方式(小結)》,本文關鍵詞  redis,實現,延時,隊列,的,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《redis實現延時隊列的兩種方式(小結)》相關的同類信息!
  • 本頁收集關于redis實現延時隊列的兩種方式(小結)的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    老司机免费视频一区二区三区| 日本vs亚洲vs韩国一区三区 | 在线观看国产一区二区| 欧美高清视频不卡网| 日韩欧美色电影| 色综合久久久久综合99| 麻豆国产精品777777在线| 欧美精品久久一区二区三区| 国产欧美一区二区精品婷婷 | 亚洲视频一二三| 日韩电影一区二区三区四区| 99久久伊人网影院| 久久精品一级爱片| 日本美女一区二区三区视频| 色悠悠久久综合| 粉嫩欧美一区二区三区高清影视 | 欧美一级在线观看| 成人h精品动漫一区二区三区| 久久久久88色偷偷免费| 色哟哟一区二区三区| 欧美精品三级在线观看| 欧美日韩一二三区| 国产成人在线视频网址| 亚洲欧洲99久久| 日韩精品一区二区三区在线观看 | 亚洲第一精品在线| 国产亚洲va综合人人澡精品| 91在线高清观看| 日本中文字幕一区二区视频| 久久99精品国产.久久久久久| 免费的成人av| 久久综合色天天久久综合图片| 3751色影院一区二区三区| 日韩欧美成人激情| 中文字幕亚洲在| 国产欧美一区二区精品久导航| 色婷婷久久久综合中文字幕 | 97成人超碰视| 国产二区国产一区在线观看| 国产成人精品网址| 亚洲精品国产一区二区三区四区在线| 久久夜色精品国产噜噜av| 欧美一区二区三级| 欧美群妇大交群中文字幕| 91精彩视频在线观看| 国产成人av资源| 青草国产精品久久久久久| 午夜欧美电影在线观看| 男男视频亚洲欧美| 国产a久久麻豆| 99免费精品在线| 男人操女人的视频在线观看欧美| 亚洲美女淫视频| 亚洲午夜国产一区99re久久| 亚洲欧美一区二区三区极速播放| 国产精品日日摸夜夜摸av| 亚洲欧美综合另类在线卡通| 亚洲精品五月天| 午夜av一区二区三区| 免费成人结看片| 国产午夜精品美女毛片视频| 久久人人超碰精品| 国产精品国产a级| 亚洲亚洲人成综合网络| 亚洲精品视频在线观看网站| 国产精品久久久一本精品| 国产精品嫩草影院av蜜臀| 国产精品丝袜91| 天天爽夜夜爽夜夜爽精品视频| 偷拍一区二区三区四区| 久久99热国产| 色8久久精品久久久久久蜜| 欧美日韩中文一区| 日韩精品专区在线| 亚洲高清在线精品| 国产精品正在播放| 亚洲精品大片www| 91一区二区在线| 日韩毛片视频在线看| 国产成人亚洲综合a∨婷婷图片 | 国产精品一区三区| 日韩欧美成人一区| 国内外成人在线| 欧美电影免费观看高清完整版在| 色8久久人人97超碰香蕉987| 中文字幕国产一区| 成人爽a毛片一区二区免费| 久久尤物电影视频在线观看| 亚洲成人免费视频| 91精品婷婷国产综合久久竹菊| 亚洲激情图片qvod| 91视视频在线观看入口直接观看www | 国产麻豆成人传媒免费观看| 欧美亚洲丝袜传媒另类| 亚洲日本青草视频在线怡红院| 国产麻豆9l精品三级站| 91精品欧美综合在线观看最新| 亚洲一区二区在线免费观看视频| 久久精品这里都是精品| 在线一区二区视频| 国产午夜精品一区二区| 国产一区二区剧情av在线| 7777精品伊人久久久大香线蕉| 亚洲午夜精品一区二区三区他趣| 欧美人体做爰大胆视频| 亚洲3atv精品一区二区三区| 91国产精品成人| 精品一区二区免费视频| 亚洲人成在线观看一区二区| 欧美三级资源在线| 麻豆91精品视频| 国产精品三级av在线播放| 一本高清dvd不卡在线观看| 九色|91porny| 午夜精品福利在线| 国产精品国产三级国产aⅴ无密码| 欧美日韩美少妇| 成人黄色在线网站| 91丝袜国产在线播放| 美女脱光内衣内裤视频久久网站 | 欧美一区国产二区| 成人av中文字幕| 国产精品不卡视频| 欧美一区二区免费观在线| 不卡一区中文字幕| 国产一区二区精品久久99| 日韩电影免费在线| 午夜一区二区三区在线观看| 亚洲国产高清aⅴ视频| 日韩视频免费观看高清完整版在线观看| 成人精品鲁一区一区二区| 国产在线日韩欧美| 国产麻豆9l精品三级站| 日韩成人av影视| 激情久久五月天| 粉嫩在线一区二区三区视频| 91丝袜美腿高跟国产极品老师 | 日本成人在线看| 日韩av一区二区在线影视| 午夜久久久久久电影| 丝袜美腿亚洲色图| 国模无码大尺度一区二区三区| 麻豆精品视频在线观看| 国产精品99久久久久久久女警 | 欧美白人最猛性xxxxx69交| 欧美一区二区三区免费大片| 欧美变态凌虐bdsm| 亚洲欧美偷拍卡通变态| 偷偷要91色婷婷| 国产盗摄女厕一区二区三区 | 国产精品久久久久久一区二区三区| 国产精品久久777777| 天天操天天色综合| 不卡欧美aaaaa| 777午夜精品视频在线播放| 中文字幕亚洲在| 一区二区三区精品在线| 国产精品日韩精品欧美在线| 欧美性色aⅴ视频一区日韩精品| 成人高清视频免费观看| 欧美激情一区在线观看| 亚洲国产裸拍裸体视频在线观看乱了 | 国产精品国产三级国产普通话蜜臀| 亚洲午夜一区二区| 成人动漫一区二区在线| 久久久久久免费网| 久久福利资源站| 91精品国产色综合久久久蜜香臀| 亚洲欧美一区二区三区孕妇| 成人晚上爱看视频| 亚洲精品在线一区二区| 美女网站一区二区| 日韩女优毛片在线| 久久99精品国产91久久来源 | 亚洲福利一区二区| 欧美性xxxxxx少妇| 天堂av在线一区| 精品久久久久久久久久久久久久久| 香蕉久久一区二区不卡无毒影院 | 成人网在线播放| 亚洲裸体xxx| 欧美日韩国产a| 国产一区二区女| 国产精品国产精品国产专区不蜜| 91在线云播放| 日本女优在线视频一区二区| 精品久久免费看| 国产精品99久| 亚洲影视在线观看| 精品欧美一区二区在线观看| www.亚洲精品| 亚洲夂夂婷婷色拍ww47| 久久综合久久久久88| 成人午夜视频福利| 视频一区欧美精品| 欧美高清在线一区| 欧美一区二区日韩一区二区| 国产福利91精品| 久久97超碰国产精品超碰| ww久久中文字幕|