【问题标题】:Get the event name in redis using java使用java获取redis中的事件名称
【发布时间】:2017-08-28 07:44:44
【问题描述】:

如果我在 redis 中监听事件,就像下面的命令,

$ redis-cli --csv psubscribe '__key*__:*'
Reading messages... (press Ctrl-C to quit)

我可以得到类似的东西

"pmessage","__key*__:*","__keyspace@0__:exipre","xxx"
"pmessage","__key*__:*","__keyevent@0__:expired","xxx"

那么,当我在redis中使用spring-data-redis监听事件时,如何获取具体的事件名称(如keyspace@0:expire),这样不仅可以获取key像“xxx”这样的值,但也得到像expireexpired这样的事件,因为我不想分别构建两个主题监听器,如下所示:

RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
//one for expire
container.addMessageListener(listenerAdapter1, new PatternTopic(//topic 1));        
//another for expired
container.addMessageListener(listenerAdapter2, new PatternTopic(//topic 2));

【问题讨论】:

    标签: redis event-handling spring-data-redis


    【解决方案1】:

    您可能想查看订阅__keyevent@*KeyspaceEventMessageListener,然后只需实现doHandleMessageMessage.getChannel() 保存有关事件类型的原始信息,例如 __keyevent@0__:expired

    KeyspaceEventMessageListener eventListener = new KeyspaceEventMessageListener(container) {
    
        @Override
        protected void doHandleMessage(Message message) {
    
            String channelInfo = new String(message.getChannel()); // __keyevent@0__:expired
            // ...
        }
    };
    

    【讨论】:

      猜你喜欢
      • 2015-10-24
      • 1970-01-01
      • 2011-11-30
      • 1970-01-01
      • 1970-01-01
      • 2012-11-29
      • 2019-10-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多