Detail the steps for Redis to enable keyspace notifications for timeout notifications
- 2020-10-31 22:02:54
- OfStack
Redis section Settings
Modify configuration file redis.conf (Windows for redis.windows.conf)
Open the configuration file (depending on where you installed it) and go to the Event notification section. Turn on the notify-ES14en-ES15en Ex annotation or add the configuration, where E stands for Keyevent, this notification returns the name of key and x for timeout events. If the ES21en-ES22en-ES23en "" configuration is not commented out, it will not take effect. Save and restart redis, 1 to restart using the current configuration file, such as src/ redis-ES27en redis.confThe SpringBoot section Settings
Add redis dependencies
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
Add the redis configuration to the global configuration file application
spring.redis.host = 39.105.145.179
spring.redis.port=6379
spring.redis.database=0
spring.redis.listen-pattern = __keyevent@0__:expired
listen-pattern fills in the timeout period, meaning that springboot will listen for timeout key space notifications issued by redis.
Create listener
public class TopicMessageListener implements MessageListener {
@Override
public void onMessage(Message message, byte[] bytes) {
byte[] body = message.getBody();
byte[] channel = message.getChannel();
System.out.println(new String(body));
System.out.println(new String(channel));
}
}
Where message is the notification returned by redis, body is the name of key that timed out, and channel is the timeout event
Create the listener configuration class
@Configuration
public class RedisListenerConfiguration {
@Bean
public RedisMessageListenerContainer getListenerContainer(RedisConnectionFactory connectionFactory){
// Create a connection container
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
// In the redis The connection
container.setConnectionFactory(connectionFactory);
// Writes the type that needs to be listened to, called timeout listening
Topic topic = new PatternTopic("__keyevent@0__:expired");
container.addMessageListener(new TopicMessageListener(), topic);
return container;
}
}
Later, when a key value expires, redis sends a notification to be received by TopicMessageListener above, in which the corresponding business method can be invoked for business processing.
conclusion