Redis также может обрабатывать временные задачи, вам нужно поговорить о боевых искусствах.

Java Redis

Привет друзья, я код фермер.

Сегодня одноклассник спросил меня, был ли я там, что я сказал?

Пришлите скриншот, я посмотрю! О, оказывается, это для помощи с заданием на время, или оно динамическое.

Он сказал два варианта, один из них использоватьDelayQueue, один из них — использовать очередь сообщений.

Он сказал, толстый брат, ты можешь научить меня некоторым трюкамХуньюань Гунфа, помогите мне выполнить это требование.

Я сказал да!

Я сказал вам, что ни один из них не прост в использовании, но он не был убежден.

Я сказал, тогда ты напишешьDelayQueueПодойди и посмотри, он не может это написать.

Он сказал, что вы, вероятно, не будете, и я сказал, что действительно не буду.

Это JUC.Традиционная нижняя разработка основана на основах и должна быть интегрирована.Я буду только корректировать пакет.

Такую временную задачу мне проще использовать в Redis.

Он попросил меня написать DEMO, и я согласился!

Как только я это сказал, он сорвалсяimg.

Вскоре я открыл IDEA, и вышло демо.

Слушатель аннулирования ключа, который переопределяет Redis:

/**
 *  当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
}

После его написания естественно остановиться на традиционных идеях программирования.Отправляю ему код.Планирую расслабиться и пощупать рыбу.

Изначально я хотел, чтобы он последовал за мной, и я думал, что он проявит инициативу, чтобы последовать за мной.

Я был неосторожен и не сказал этого.

Затем через десять минут он сказал мне, что сделал это и не последовал за мной.

Я сказал одноклассникам, вы не соблюдаете правила, вы не понимаете.

Он был занят извинениями, я не знаю правил!

Я говорю молодые люди,

без правил,

Приходить,

Шлюха!

Мой маленький кодовый фермер с пятилетним стажем.

Это нормально? Это не хорошо.

Я советую этому студенту,

Сок из крысиного хвоста.

Отражать.

Обращать внимание.

Положите хороший палец вверх.

Комментируйте хорошо.

Гармонию ставить как самое ценное, подчиняться правилам,

Не будь проституткой все время.

Уделять больше внимания:Код Фермер Маленький Толстый Брат.

Спасибо одноклассникам!

Личный блог: https://felord.cn

Категории