Spring data redis – прослушать событие истечения срока действия

Я хотел бы прослушивать события истечения срока действия с помощью KeyExpirationEventMessageListener, но не могу найти пример.

Кто-нибудь знает, как это сделать с помощью Spring boot 1.4.3 и Spring Data Redis?

я сейчас этим занимаюсь

    JedisPool pool = new JedisPool(new JedisPoolConfig(), "localhost");
    this.jedis = pool.getResource();
    this.jedis.psubscribe(new JedisPubSub() {
        @Override
        public void onPMessage(String pattern, String channel, String message) {
            System.out.println("onPMessage pattern " + pattern + " " + channel + " " + message);
            List<Object> txResults = redisTemplate.execute(new SessionCallback<List<Object>>() {
                public List<Object> execute(RedisOperations operations) throws DataAccessException {
                    operations.multi();
                    operations.opsForValue().get("val:" + message);
                    operations.delete("val:" + message);
                    return operations.exec();
                }
            });
            System.out.println(txResults.get(0));
        }
    }, "__keyevent@0__:expired");

И я хотел бы использовать Spring вместо Jedis напрямую.

С Уважением


person BkSouX    schedule 06.01.2017    source источник


Ответы (1)


Не используйте KeyExpirationEventMessageListener, так как это вызывает RedisKeyExpiredEvent, что затем приводит к сбою в RedisKeyValueAdapter.onApplicationEvent.

Скорее используйте RedisMessageListenerContainer:

@Bean
RedisMessageListenerContainer keyExpirationListenerContainer(RedisConnectionFactory connectionFactory) {

    RedisMessageListenerContainer listenerContainer = new RedisMessageListenerContainer();
    listenerContainer.setConnectionFactory(connectionFactory);

    listenerContainer.addMessageListener((message, pattern) -> {

        // event handling comes here

    }, new PatternTopic("__keyevent@*__:expired"));

    return listenerContainer;
}

RedisMessageListenerContainer запускает все уведомления в собственном потоке.

person mp911de    schedule 06.01.2017