欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品

主頁 > 知識庫 > 基于redis實現定時任務的方法詳解

基于redis實現定時任務的方法詳解

熱門標簽:四川穩定外呼系統軟件 b2b外呼系統 一個地圖標注多少錢 400電話辦理的口碑 南京手機外呼系統廠家 廊坊外呼系統在哪買 地圖標注工廠入駐 高碑店市地圖標注app 臺灣電銷

前言

業務中碰到的需求(抽象描述一下):針對不同的用戶能夠實現不同時間的間隔循環任務。比如在用戶注冊成功24小時后給用戶推送相關短信等類似需求。

使用crontab?太重,且基本不現實,不可能給每一個用戶在服務器上生成一個定時任務。
定時輪詢?IO頻繁且效率太低

想到經常的使用的redis可以設置緩存時間,應該會有過期的事件通知吧,查了一下文檔,果然有相關配置,叫做“鍵空間事件通知”。具體說明可參考官方文檔。

技術棧

redis / nodeJs / koa

技術重難點

  • 開啟redis的鍵空間通知功能(2.8.0及以上的版本才有此功能)
  • 盡量使用單獨的redis db來實現
  • 使用基于redis的分布式鎖來實現相關事件不會被重復消費
  • 需要二次使用的信息需要體現在redis緩存的key中
  • redis cache key使用業務前綴,避免重名覆蓋
  • 防止業務服務重啟導致nodejs層面的監聽失效

"talk is cheap, show me the code 🤖"

核心代碼

核心代碼
const { saveClient, subClient } = require('./db/redis') // 存儲實例和訂閱實例需要為兩個不同的實例
const processor = require('./service/task')
const config = require('./config/index')
const innerDistributedLockKey = '__' // 內部使用的分布式鎖的key的特征值
const innerDistributedLockKeyReg = new RegExp(`^${innerDistributedLockKey}`)

saveClient.on('ready', async () => {
 saveClient.config('SET', 'notify-keyspace-events', 'Ex') // 存儲實例設置為推送鍵過期事件
 console.log('redis init success')
})

subClient.on('ready', () => { // 服務重啟后依舊可以初始化所有processor
 subClient.subscribe(`__keyevent@${config.redis.sub.db}__:expired`) // 訂閱實例負責訂閱消息
 subClient.on('message', async (cahnnel, expiredKey) => {
  // 分布式鎖的key不做監聽處理
  if (expiredKey.match(innerDistributedLockKeyReg)) return
  // 簡易分布式鎖,拿到鎖的實例消費event
  const cackeKey = `${innerDistributedLockKey}-${expiredKey}`
  const lock = await saveClient.set(cackeKey, 2, 'ex', 5, 'nx') // 這里的用法可以實現簡易的分布式鎖
  if (lock === 'OK') {
   await saveClient.del(cackeKey)
   for (let key in processor) {
    processor[key](expiredKey) // processor對應的是接收到相關鍵過期通知后執行的業務邏輯,比如推送短信,然后在相關processor中再次set一個定時過期的key
   }
  }
 })
 console.log('subClient init success')
})
servide/task (processor)
exports.sendMessage = async function sendMessage(expiredKey, subClient) {
 // 只處理相關業務的過期事件
 if (expiredKey.match(/^send_message/)) {
  const [prefix, userId, type] = expiredKey.split('-')
  let user = getUser(userId)
  if (user.phone) {
   push(message) // 偽代碼
   resetRedisKey(expiredKey, ttl) // 重新把key設置為一段時間后過期,過期后會再次觸發本邏輯
  }
 }
}

總結

  • 此功能利用了redis的鍵空間通知功能實現了簡單了基于用戶或者基于不同業務場景的定時任務功能。由于鍵空間事件通知功能是一個較消耗CPU的操作,所以建議使用單獨的DB來處理。
  • 這里展示出來的是基本用法,未考慮定時任務的持久化功能,如果使用過程中redis故障重啟,則會導致所有定時任務丟失。如果在redis發布鍵失效通知時,訂閱服務出故障未在線,或者網絡問題沒有被消費方收到,也會導致此次事件丟失。
  • redis的expired事件并不是在key過期的時候觸發,而是在key被刪除的時候觸發。redis會定期清理過期的key,或者當訪問key的時候檢查是否過期,只有這時過期的key才會觸發刪除操作,因此會有一些小的時間差距(個人的實際使用中并沒有影響用戶體驗)。

因此需要權衡使用redis的過期機制實現的定時任務的使用場景。

好了,以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。

您可能感興趣的文章:
  • java操作Redis緩存設置過期時間的方法
  • 使用redis的increment()方法實現計數器功能案例
  • Redis有效時間設置以及時間過期處理操作

標簽:甘南 河源 拉薩 南寧 畢節 定州 伊春 泰州

巨人網絡通訊聲明:本文標題《基于redis實現定時任務的方法詳解》,本文關鍵詞  基于,redis,實現,定時,任務,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《基于redis實現定時任務的方法詳解》相關的同類信息!
  • 本頁收集關于基于redis實現定時任務的方法詳解的相關信息資訊供網民參考!
  • 推薦文章
    欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品
  • <rt id="w000q"><acronym id="w000q"></acronym></rt>
  • <abbr id="w000q"></abbr>
    <rt id="w000q"></rt>
    亚洲午夜激情网页| 国产成人精品免费视频网站| 最好看的中文字幕| 一本大道久久a久久精品综合| 2020国产精品自拍| 一区二区三区欧美亚洲| 99久久99精品久久久久久| 欧美日韩国产黄色| 国产日产亚洲精品系列| 蜜桃精品在线观看| 五月天激情小说| 欧美综合久久久| 一区二区三区四区不卡在线 | 亚洲精品美腿丝袜| 激情欧美一区二区三区在线观看| 蜜桃传媒一区二区亚洲| 26uuu色噜噜精品一区| 激情六月婷婷久久| 亚洲欧美综合7777色婷婷| 中文字幕免费在线观看视频一区| 国产河南妇女毛片精品久久久| 女性裸体视频网站| 国产精品国产成人国产三级| 成人短视频下载| 欧洲一区二区三区免费视频| 亚洲午夜在线视频| 北岛玲一区二区| 久久日一线二线三线suv| 国产乱国产乱300精品| 欧美老熟妇一区二区三区| 亚洲色图另类专区| 亚洲图片欧美另类| 精品国产精品一区二区夜夜嗨| 国产九九视频一区二区三区| 亚洲av鲁丝一区二区三区| 夜色激情一区二区| 免费a级黄色片| 久久午夜色播影院免费高清| 国产成人精品三级麻豆| 色婷婷亚洲婷婷| 亚洲一区二区精品视频| 捆绑裸体绳奴bdsm亚洲| 久久婷婷综合激情| 国产99久久久国产精品 | 看片的网站亚洲| 欧美福利在线视频| 亚洲欧美日韩国产综合| 中文字幕永久免费| 精品国产一区二区亚洲人成毛片| 国产盗摄女厕一区二区三区| 欧洲国内综合视频| 麻豆久久久久久久| 精品自拍偷拍视频| 视频一区视频二区中文字幕| 国产白丝一区二区三区| 一区二区三区产品免费精品久久75| 欧洲一级黄色片| 亚洲国产成人一区二区三区| 久久久久久久久久影视| 久久久99精品免费观看| 小日子的在线观看免费第8集| 欧美不卡在线视频| av高清久久久| 欧美xxxxxxxx| 91亚洲永久精品| 精品久久人人做人人爰| 97精品久久久午夜一区二区三区| 日韩免费高清av| av不卡在线观看| 亚洲精品在线免费观看视频| 97久久精品人人做人人爽| 精品1区2区在线观看| 精品人妻人人做人人爽夜夜爽| 欧美精品一区二区不卡| 欧美性猛交xx| 亚洲国产精品99久久久久久久久| 久久久久久久人妻无码中文字幕爆| 久久久久久久av麻豆果冻| 91蝌蚪国产九色| 国产欧美日韩另类一区| 91玉足脚交白嫩脚丫| 中文字幕一区二区不卡| 国产美女免费网站| 性欧美疯狂xxxxbbbb| 午夜av入18在线| 激情小说亚洲一区| 91麻豆精品国产91久久久使用方法| 成人美女在线观看| 精品成人私密视频| 日本三级日本三级日本三级极| **欧美大码日韩| 久久久精品成人| 日韩电影免费一区| 欧美性大战久久久久久久 | 麻豆精品一区二区av白丝在线| 色就色 综合激情| 国产福利一区在线| 欧美精品一区二区三区在线| 国产十八熟妇av成人一区| 亚洲欧美日韩国产手机在线| 美女av免费看| 久久精品久久精品| 欧美一区二区美女| 极品白嫩少妇无套内谢| 亚洲欧美日韩成人高清在线一区| 91无套直看片红桃在线观看| 男人的j进女人的j一区| 这里只有精品99re| 涩视频在线观看| 亚洲综合色视频| 91久久精品一区二区三| 成人免费av在线| 国产精品卡一卡二卡三| 亚洲aaa视频| 国产精品一级在线| 国产欧美日本一区视频| 手机av在线不卡| 国内成人免费视频| 久久综合九色综合欧美就去吻 | 亚洲国产你懂的| 欧美在线色视频| 91亚洲精品一区二区乱码| 亚洲图片激情小说| 色偷偷久久一区二区三区| aaa欧美大片| 亚洲色图欧美偷拍| 日本精品免费观看高清观看| 99精品视频中文字幕| 亚洲免费在线观看| 91国模大尺度私拍在线视频| 成人午夜激情影院| 国产精品国产三级国产| 国产精品白嫩白嫩大学美女| 99re成人在线| 一区二区三区小说| 欧美日韩国产在线播放网站| 无码av免费精品一区二区三区| 亚洲大片在线观看| 日韩亚洲欧美一区二区三区| 丰满大乳奶做爰ⅹxx视频| 免费看欧美美女黄的网站| 久久男人中文字幕资源站| 国产一区在线观看免费| 成人午夜激情视频| 亚洲精品亚洲人成人网| 在线播放日韩导航| 亚洲国产欧美视频| 韩国v欧美v日本v亚洲v| 欧美国产精品一区二区三区| 少妇久久久久久被弄高潮| 91免费视频观看| 日韩中文字幕区一区有砖一区| 精品福利二区三区| 糖心vlog免费在线观看 | 国产日本欧美一区二区| 一区二区成人免费视频| 中文字幕 欧美 日韩| 日本特黄久久久高潮| 久久精品男人天堂av| 色呦呦国产精品| 国产原创剧情av| 精品午夜一区二区三区在线观看 | 90岁老太婆乱淫| 国产福利一区在线| 亚洲综合免费观看高清在线观看| 日韩一区二区免费在线电影 | 久久精品三级视频| 北岛玲一区二区三区四区| 亚洲va欧美va人人爽| 久久综合久色欧美综合狠狠| 国产精品视频一区二区三 | 国产拍欧美日韩视频二区| 色婷婷久久99综合精品jk白丝| 欧美xxxxx精品| 国产一区二区三区免费播放| 亚洲精品ww久久久久久p站| 日韩欧美一级二级| 亚洲熟女www一区二区三区| 国产二级一片内射视频播放| 国产精品99久久久久久有的能看| 一区二区三区中文在线观看| 久久综合九色综合欧美就去吻 | 色综合色综合色综合| 国产精品久久AV无码| 成人免费毛片高清视频| 视频精品一区二区| 国产精品灌醉下药二区| 欧美一区二区成人6969| 九九精品视频免费| 欧美大片免费播放器| www.日韩大片| 久久精品国产久精国产爱| 亚洲欧美日本韩国| 久久噜噜亚洲综合| 欧美日本在线播放| caoporn91| 免费看黄色av| 伊人网综合视频| 99久久精品国产一区| 激情伊人五月天久久综合|