NodeJS 使用redis实现定时执行任务

文章目录

  • NodeJS 使用redis实现定时执行任务
    • 场景
    • 使用Redis定时器解决
      • Redis定时器
      • Redis发布订阅
      • 操作
      • nodejs代码
      • 主意事项

场景

  • 用户下订单后,需要在5分钟内完成支付,否则订单关闭;
  • 用户在完成订单后,如果没有评论,过一星期,系统自动评论,并完结。
  • 设值预约定时发送消息

使用Redis定时器解决

Redis定时器

Redis中有一个expire命令,用来设置key的过期时间。使用发布订阅,可以接收到key的过期提醒,当key过期时,再执行相关业务逻辑。

127.0.0.1:6379> set test tom EX 10
OK
127.0.0.1:6379> get test
(nil)

设置test(key)的过期时间为10秒,10秒过后key自动销毁。

Redis发布订阅

Redis发布订阅(pub/sub)是一种消息模式,发送者(pub)发送消息,订阅者(sub)接收消息。

Redis客户端可以订阅任意数量的频道。

用一张图来展示频道(channel1)与订阅者(client2, client5, client1)的关系:

当有消息发布时,他们的关系

redis的key过期通知也是基于发布订阅模型的。不同的是订阅频道是固定的__keyevent@0__:expired,当然,redis还有好多类似与这种特定频道的通知,想了解更多,可以看这里Redis键空间通知。

操作

1、Windows 操作系统下,在redis程序根目录打开命令行窗口执行以下命令 开启对过期删除key 通知功能

./redis-cli config set notify-keyspace-events Ex

nodejs代码

var redis = require("redis");
var client = redis.createClient(6379, "127.0.0.1");
var client1 = redis.createClient(6379, "127.0.0.1");function getRedisData() {  //客户端连接redis成功后执行回调client.on("ready", function () {//订阅消息client.subscribe("chat");client.subscribe("chat1");console.log("订阅成功。。。");});client.on("error", function (error) {console.log("Redis Error " + error);});//监听订阅成功事件client.on("subscribe", function (channel, count) {console.log("client subscribed to " + channel + "," + count + "total subscriptions");});//收到消息后执行回调,message是redis发布的消息client.on("message", function (channel, message) {console.log("我接收到信息了" + message);//在这里收到消息,处理业务逻辑});//监听取消订阅事件client.on("unsubscribe", function (channel, count) {console.log("client unsubscribed from" + channel + ", " + count + " total subscriptions")});
}

主意事项

由于开启了消息订阅通道的 redis通信信道的客服端连接,不能做其他操作,比如 增加、删除、修改操作,需要其他的redis连接对象去操作。

NodeJS 使用redis实现定时执行方法相关推荐

  1. Salesforce系列(十):Salesforce Schedule cron定时执行方法!

    Salesforce系列(十):Salesforce Schedule cron定时执行方法! 前言 今天博主将为大家分享Salesforce系列(十):Salesforce Schedule cro ...

  2. C# 定时执行方法

    定时执行某个方法 private void button1_Click(object sender, EventArgs e){System.Timers.Timer timer = new Syst ...

  3. Windows下的自动定时执行方法 - 定时执行专家

    [正文] 一.软件简介 <定时执行专家>是一款制作精良.功能全面.使用简单的专业定时执行工具软件.支持 18 种任务类型,11 种任务触发方式(包含 Cron方式),触发精度达到" ...

  4. java 定时执行方法_Java定时执行任务 方法总结

    JAVA技巧(Java定时执行任务的实现方法)2009年02月07日 星期六 10:36定时执行任务的三种方法: 1)java.util.Timer. 2)ServletContextListener ...

  5. 用java设计节拍器_java定时执行方法节拍器

    最近准备在Android下写一个节拍器,因为不熟悉Android开发的一系列东西,所以想着先用Java写一个节拍器再说.好歹,能把算法弄明白.在节拍器这个定时执行程序中,有两个最重要的类:Timer和 ...

  6. setTimeout()定时执行方法

    在做项目中经常要用到定时器,过多久执行什么方法,我这是做页面提示,当用户请求成功或失败时,给用户反馈,但是我们总不能让反馈消息一直显示在页面上,这样体验感也太难受了,所以我这里是过2秒就自动把提示清除 ...

  7. oracle 脚本定时,Oracle存储过程定时执行2种方法

    我们今天主要描述Oracle存储过程定时执行方法主要有2种方法,愿在你学习Oracle存储过程定时执行实际操作中以起到抛砖引玉的作用.你如果对其有兴趣的话你就可以点击以下的文章进行观看了. 1.编写s ...

  8. java+timer+退出,java timer 兑现在指定时间执行方法

    java timer 实现在指定时间执行方法 最近在弄一个定时发送的项目,需要定时执行方法,于是用到了Timer,但是我想要的功能网络上的资源比较少,所以自己研究了一下. 下面是我写的一些代码 imp ...

  9. linux定时执行python脚本_linux定时执行python脚本的方法以及失败不执行的处理方法...

    首页,linux定时任务用到的是crontab,我们来看一下crontab如何使用 crontab-1[user]-列出用户目前的crontab. crontab-e[user]-编辑用户目前的cro ...

最新文章

  1. mysql having实例_Mysql必读mysql group by having 实例代码
  2. 决策树算法绘图——graphviz安装
  3. Codeforces 892E Envy
  4. php 删除服务器上的文件,php如何删除服务器文件
  5. 作者:杨晋吉(1968-),男,华南师范大学计算机学院教授。赵淦森(1977-),男,博士,华南师范大学计算机学院教授、副院长。...
  6. C++Windows下CONTAINING_RECORD宏的用法和详解
  7. 【面向对象】第三单元总结——JML
  8. 41.D3D数学库 GameProject7
  9. table 转义字符 html,HTML转义字符表
  10. 2021第四届浙江省大学生网络与信息安全竞赛预赛部分Writeup
  11. 3dmax2015安装教程与破解方法(其中一步极为重要!!!)
  12. 最简单的Tomcat9下载安装教程
  13. Win10-1809 离线安装 .net framework 3.5
  14. 低压气体直流击穿特性
  15. java对word文档的操作
  16. 拉普拉斯方程和泊松方程的MATLAB可视化
  17. Linux 压缩、解压、打包操作
  18. 【dva】dva使用与实现(三)
  19. _snprintf_s与_snprintf
  20. 感受山猫之力 Ubuntu 10.04 LTS试用手记

热门文章

  1. LTE - PUCCH Format2
  2. 对ARM异常(Exceptions)的理解
  3. leetcode-152 乘积最大子序列
  4. ab测试nginx Nginx性能优化
  5. iOS开发UI篇—多控制器和导航控制器简单介绍
  6. bzoj 3598 [ Scoi 2014 ] 方伯伯的商场之旅 ——数位DP
  7. CSS常见布局解决方案
  8. 通过Appium获取Android app中webview
  9. DevXpress 控件: 第一篇: 将 Master_Details 关系进行到底--XtraPivotGridControl控件
  10. GitLab CI流水线配置文件.gitlab-ci.yml详解(三)