クラスタ内の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();
}
}