SpringBoot配置Redis监听器

查找了一些后总结,个人食用。

1.导包

     <!-- redis -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

2.配置类RedisConfig

@Configuration
public class RedisConfig {


    @Autowired
    private RedisConnectionFactory connectionFactory;

    @Bean
    RedisMessageListenerContainer redisMessageListenerContainer() {
        RedisMessageListenerContainer container = new RedisMessageListenerContainer();
        container.setConnectionFactory(connectionFactory);
        //container.addMessageListener(new RedisExpiredListener(), new PatternTopic("__keyevent@0__:expired"));
        return container;
    }

    // 创建基本的key监听器
    /*  */
    @Bean
    public RedisKeyChangeListener redisKeyChangeListener() throws Exception {
        RedisKeyChangeListener listener = new RedisKeyChangeListener(redisMessageListenerContainer(),"");
        return listener;
    }
}

3.配置监听器

/**
 * @description 期望是可以监听某个key的变化,而不是失效
 */
public class RedisKeyChangeListener implements MessageListener/* extends KeyspaceEventMessageListener */ {
    private final String listenerKeyName; // 监听的key的名称
    private static final Topic TOPIC_ALL_KEYEVENTS = new PatternTopic("__keyevent@*"); //表示只监听所有的key
    private static final Topic TOPIC_KEYEVENTS_SET = new PatternTopic("__keyevent@0__:set"); //表示只监听所有的key
    private static final Topic TOPIC_KEYNAMESPACE_NAME = new PatternTopic("__keyspace@0__:myKey"); // 不生效
    // 监控
    //private static final Topic TOPIC_KEYEVENTS_NAME_SET_USELESS = new PatternTopic("__keyevent@0__:set myKey");
    private String keyspaceNotificationsConfigParameter = "KEA";

    public RedisKeyChangeListener(RedisMessageListenerContainer listenerContainer, String listenerKeyName) {
        this.listenerKeyName = listenerKeyName;
        initAndSetRedisConfig(listenerContainer);
    }

    public void initAndSetRedisConfig(RedisMessageListenerContainer listenerContainer) {

        if (StringUtils.hasText(keyspaceNotificationsConfigParameter)) {

            RedisConnection connection = listenerContainer.getConnectionFactory().getConnection();

            try {

                Properties config = connection.getConfig("notify-keyspace-events");

                if (!StringUtils.hasText(config.getProperty("notify-keyspace-events"))) {
                    connection.setConfig("notify-keyspace-events", keyspaceNotificationsConfigParameter);
                }

            } finally {
                connection.close();
            }
        }
        // 注册消息监听
        listenerContainer.addMessageListener(this, TOPIC_ALL_KEYEVENTS);
    }

    @Reference
    private UserInfoApi userInfoApi;

    @Reference
    private FreezeApi freezeApi;

    @Override

    public void onMessage(Message message, byte[] pattern) {
      
        String key = new String(message.getBody());
        String method = new String(message.getChannel());
        
            System.out.println(key + "----" + method);

    }
}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,关于SpringBoot实现Redis监听器的问题,可以参考以下步骤: 1. 添加相关依赖 在pom.xml文件中添加如下依赖: ``` <dependency>     <groupId>org.springframework.boot</groupId>     <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> ``` 2. 创建监听器 创建一个类,实现org.springframework.data.redis.connection.MessageListener接口,并在该类中重写onMessage方法,监听Redis中指定key的变化。 ``` @Component public class RedisMessageListener implements MessageListener { @Override public void onMessage(Message message, byte[] pattern) { // 监听到key的变化后,在这里实现具体的操作 } } ``` 3. 配置监听器Spring Boot配置类中,注入RedisMessageListener,并通过RedisConnectionFactory创建监听器容器,并指定需要监听的key。 ``` @Configuration public class RedisConfig { @Autowired private RedisMessageListener redisMessageListener; @Bean MessageListenerAdapter listenerAdapter() { return new MessageListenerAdapter(redisMessageListener); } @Bean RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) { RedisMessageListenerContainer container = new RedisMessageListenerContainer(); container.setConnectionFactory(connectionFactory); container.addMessageListener(listenerAdapter(), new PatternTopic("your_key_pattern")); return container; } } ``` 4. 测试 监听器配置完成后,可以通过RedisTemplate向指定key写入数据,验证是否能够监听到key的变化。 以上就是SpringBoot实现Redis监听器的基本步骤。如有疑问,请随时向我提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值