クラスタ内のredisの期限切れリスニング

3332 ワード

クラスタ内のredisの期限切れリスニング


転載:https://blog.csdn.net/xuyide6/article/details/86686152redisを変更します.confのnotify-keyspace-events"Ex"は、リスニングクラスを再構築してこのイベントをリスニングするには、直接コード1を言うことは多くありません.pomファイルの構成

            org.springframework.boot
            spring-boot-starter-data-redis
            2.0.2.RELEASE
        

2.ymlファイルの構成
spring:
  redis:
    password: ******
    expireSeconds: 120
    commandTimeout: 10000
    sub:
      clusterAddress: redis://192.168.40.207:8001
    cluster:
      max-redirects: 100
      nodes: 192.168.40.207:8001,192.168.40.207:8002,192.168.40.208:8001,192.168.40.208:8002,192.168.40.209:8001,192.168.40.209:8002

3.redis構成
@Configuration
public class RedisListenerConfig {

    @Value("${spring.redis.sub.clusterAddress}")
    private String redisSubURI;

    @Value("${spring.redis.password}")
    private String redisPassword;

    @Bean(destroyMethod = "shutdown")
    ClientResources clientResources() {
        return DefaultClientResources.create();
    }

    @Bean(destroyMethod = "shutdown")
    RedisClusterClient redisClusterClient(ClientResources clientResources) {

        RedisURI redisURI = RedisURI.create(redisSubURI);
        redisURI.setPassword(redisPassword);
        return RedisClusterClient.create(clientResources, redisURI);
    }

    @Bean(destroyMethod = "close")
    StatefulRedisClusterConnection statefulRedisClusterConnection(RedisClusterClient redisClusterClient) {
        return redisClusterClient.connect();
    }
}

4.傍受@Slf 4 jを作成するにはlombokプラグイン注記を使用し、削除する必要はありません
@Component
@Slf4j
public class RedisClusterListener extends RedisClusterPubSubAdapter {

    @Autowired
    private RedisTemplate redisTemplate;
    @Override
    public void message(RedisClusterNode node, Object channel, Object message) {
        String expireKey = null;
        try {
            //       
           expireKey = (String) message;
           System.out.println("   key:"+expireKey);
        }catch (Exception e){
            log.error("      ");
            return;
        }
    }
}

5.サブスクライバの作成と同時にリスニングを開始
@Component
public class RedisSubscriber extends RedisPubSubAdapter implements ApplicationRunner {

    private static final String EXPIRED_CHANNEL = "__keyevent@0__:expired";

    @Autowired
    private RedisClusterListener redisClusterListener;

    @Autowired
    private RedisClusterClient redisClusterClient;

    public void startListener(){
        StatefulRedisClusterPubSubConnection pubSubConnection = redisClusterClient.connectPubSub();
        pubSubConnection.setNodeMessagePropagation(true);
        pubSubConnection.addListener(redisClusterListener);

        PubSubAsyncNodeSelection masters = pubSubConnection.async().masters();
        NodeSelectionPubSubAsyncCommands commands = masters.commands();
        commands.subscribe(EXPIRED_CHANNEL);
    }

    @Override
    public void run(ApplicationArguments args) throws Exception {
        startListener();
    }
}