NodeJS 使用redis实现定时执行方法

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

场景

  • 用户下订单后,需要在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)的关系:

image-20210119225414634

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

image-20210119225428225

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连接对象去操作。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

古月_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值