软考高级之redis中使用zset实现延迟队列,你答对了么?

实现延迟队列的思路

zset的特性,带有分数的排序,以时间戳作为分数进行排序

  1. 添加任务 zdd
  2. 取出任务 zrangbyscore
  3. 执行任务 zrem

定时任务

  public static void main(String[] args) {
        Jedis jedis = new Jedis("ip", 6379);
        TimerTask task = new TimerTask() {
            @Override
            public void run() {
                // 这里是定时任务的执行代码
                Set<String> order = jedis.zrangeByScore("delayOrderQueue", System.currentTimeMillis()-10000, System.currentTimeMillis());
                //取出任务进行执行
                for (String orderId : order) {
                    Long order1 = jedis.zrem("delayOrderQueue", orderId);
                    System.out.println("执行任务:" +  orderId);
                }
            }
        };
        Timer timer = new Timer();
        long delay = 0; // 延迟开始执行时间,单位:毫秒
        long period = 1000; // 定时任务执行间隔,单位:毫秒
        timer.scheduleAtFixedRate(task,delay,period);
    }

添加任务

/**
     * zset实现实现延迟队列
     */
    @Test
    public void TestZet(){
        long currentTimeMillis = System.currentTimeMillis();
        System.out.println(currentTimeMillis);
        jedis.zadd("delayOrderQueue", currentTimeMillis, "1");
        jedis.zadd("delayOrderQueue", currentTimeMillis+3000, "2");
        jedis.zadd("delayOrderQueue", currentTimeMillis+5000, "3");
    }

软考高级之redis中使用zset实现延迟队列,你答对了么?

  • 8
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小刘同学要加油呀

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

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

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

打赏作者

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

抵扣说明:

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

余额充值