转自:https://www.cnblogs.com/wangyunhong/articles/16505079.html
1.redis配置
1.打开conf/redis.conf 文件,取消注释:notify-keyspace-events Ex
2.重启redis
3.如果设置了密码需要重置密码:config set requirepass ****
3.验证配置是否生效
步骤一:进入redis客户端:redis-cli
步骤二:执行 CONFIG GET notify-keyspace-events ,如果有返回值证明配置成功,如果没有执行步骤三
步骤三:执行CONFIG SET notify-keyspace-events "Ex",再查看步骤二是否有值
注意:重置密码和重置配置是否每次重启redis都需要重新设置看个人需要。
2.redis的监听conf
package com.gf.ecrm.redislistenerconfig;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;import javax.annotation.Resource;@Configuration
public class RedisListenerConfig {@Resourceprivate RedisConnectionFactory redisConnectionFactory;@Resourceprivate RedisKeyExpirationListener redisExpiredListener;@Beanpublic RedisMessageListenerContainer redisMessageListenerContainer() {RedisMessageListenerContainer redisMessageListenerContainer = new RedisMessageListenerContainer();redisMessageListenerContainer.setConnectionFactory(redisConnectionFactory);//监听所有key的过期事件redisMessageListenerContainer.addMessageListener(redisExpiredListener, redisExpiredListener.getTopic());return redisMessageListenerContainer;}}
3.监听业务代码
package com.gf.ecrm.redislistenerconfig;import lombok.Data;
import org.springframework.data.redis.connection.Message;
import org.springframework.data.redis.connection.MessageListener;
import org.springframework.data.redis.listener.PatternTopic;
import org.springframework.stereotype.Component;@Data
@Component
public class RedisKeyExpirationListener implements MessageListener {//监听的主题(只监听redis数据库1,如果要监听redis所有的库,把1替换为*)public final PatternTopic topic = new PatternTopic("__keyevent@1__:expired");/*** Redis失效事件 key** @param message* @param pattern*/@Overridepublic void onMessage(Message message, byte[] pattern) {String expiraKey = message.toString();System.out.println(expiraKey);}
}