关于java:年轻人不讲武德来白piao我这个老同志

38次阅读

共计 2344 个字符,预计需要花费 6 分钟才能阅读完成。

敌人们好啊,我是码农小胖哥。

明天有个同学问我在吗,我说什么事?

给我发个截图,我一看!噢,原来是帮忙搞个定时工作,还是动静的。

他说了两种抉择,一种是用DelayQueue, 一种是用音讯队列。

他说,胖哥你能不能教我点招式混元功法,帮我实现这个需要。

我说能够!

我说你这两种都不好用,他不服气。

我说那你写个 DelayQueue 来看看,他写不进去。

他说你这预计也不会,我说我的确不会。

这是 JUC,传统底层开发是要讲根底的,必须死记硬背,我只会调包。

这种定时工作我用 Redis 更简略些。

他让我写个 DEMO,我说能够!

我一说,他啪就发了个表情

很快啊,我就关上 IDEA,一个 DEMO 就进去了。

一个重写了 Redis 的 Key 生效监听器:

/**
 *  当 redis 中的 key 过期时,触发一个事件,并不会准点触发事件,实用于工夫不是特地敏感的触发需要。*  咱们能够算好须要执行的工夫距离作为 key 生效工夫,这样就能够保障到点执行逻辑了。*/
public class RedisJobEventMessageListener extends KeyExpirationEventMessageListener {

    /**
     * Instantiates a new Redis event message listener.
     *
     * @param listenerContainer the listener container
     */
    public RedisEventMessageListener(RedisMessageListenerContainer listenerContainer) {super(listenerContainer);
    }


    @Override
    protected void doHandleMessage(Message message) {String key = message.toString();
        // 这个就是过期的 key,过期后,也就是事件触发后对应的 value 是拿不到的。// 这里实现业务逻辑,如果是服务器集群的话须要应用分布式锁进行抢占执行。System.out.println("key =" + key);
        System.out.println("end =" + LocalDateTime.now());
    }
}

一个监听器的配置:

/**
 * Redis 音讯监听器容器.
 *
 * @param redisConnectionFactory the redis connection factory
 * @return the redis message listener container
 */
@Bean
public RedisMessageListenerContainer redisMessageListenerContainer(RedisConnectionFactory redisConnectionFactory) {RedisMessageListenerContainer redisMessageListenerContainer = new RedisMessageListenerContainer();
    redisMessageListenerContainer.setConnectionFactory(redisConnectionFactory);
    return redisMessageListenerContainer;
}


/**
 * Redis 定时工作监听器注册为 Bean.
 *
 * @param redisMessageListenerContainer the redis message listener container
 * @return the redis event message listener
 */
@Bean
public RedisJobEventMessageListener redisEventMessageListener(RedisMessageListenerContainer redisMessageListenerContainer){return new RedisJobEventMessageListener(redisMessageListenerContainer);
}

一个执行测试:

@Test
public void redisJobTest() {
    // 调用 redisTemplate 对象设置一个 10s 后过期的键,不出意外 10s 后键过期后会触发事件打印后果
    redisTemplate.boundValueOps("job").set("10s",10, TimeUnit.SECONDS);
    System.out.println("begin =" + LocalDateTime.now());
    try {
        // 测试须要休眠能力看到后果
        Thread.sleep(20000);
    } catch (InterruptedException e) {e.printStackTrace();
    }
    // --------- 测试后果 ---------
    // begin = 2020-11-18T00:19:09.272
    // key = job
    // end = 2020-11-18T00:19:19.369
}

写完之后天然是传统编程思路点到为止,我把代码发给他,我打算放松一下,摸一摸鱼。

我原本想让他关注我,我想着他会被动去关注。

我粗心了,没有说。

而后十分钟后他通知我他搞定了,而且没有关注我。

我说同学你不讲规矩,你不懂。

他忙说对不起,我不懂规矩啊!

我说年轻人,

不讲规矩,

来,

白嫖!

我五年教训的小码农。

这好吗?这不好。

我劝这位同学,

耗子尾汁。

好好反思。

好好关注。

好好点赞。

好好评论。

要以和为贵,要讲规矩,

不要老是白嫖。

多多关注:码农小胖哥

谢谢同学们!

关注公众号:Felordcn 获取更多资讯

集体博客:https://felord.cn

正文完
 0