Spring+Reids 订阅键过期通知

项目需求:redis缓存的数据生存时间过期,提醒用户去更新缓存

 

♦♦ Step one:开启Reids通知功能的配置

方法一:修改redis/redis.conf配置文件,添加如下设置   (永久有效)

notify-keyspace-events Ex

方法二:连接redis客户端,执行如下语句  (重启redis后失效)

config set notify-keyspace-events Ex

tip : Redis Config Set 命令可以动态地调整 Redis 服务器的配置(configuration),执行后无需重启,直接生效。

 

 ♦♦ Step two: 添加maven依赖 (注意版本问题)


	org.springframework.data
	spring-data-redis
	1.8.4.RELEASE


	redis.clients
	jedis
	2.9.0

 

♦♦ Step three:Redis配置

一:redis.properties

#ip地址
redis.host = 114.215.83.3
#redis端口
redis.port = 6380
#auth 验证密码
redis.passwd = 123
#最大能够保持idle状态的对象数  
redis.maxIdle=300  
#最大分配的对象数    注意:低版本的jedis该属性名称是 maxActive
redis.maxTotal=600 
#当池内没有返回对象时,最大等待时间  注意:低版本的jedis该属性名称是 maxWait
redis.maxWaitMillis=1000  
#当调用borrow Object方法时,是否进行有效性检查  
redis.testOnBorrow=true 
#超时时间
redis.timeout=100000

二:spring整合redis的配置文件   applicationContext-redis.xml





	
	

	
	
		
		
		
		
	

	
	
		
		
		
		
		
		
	

	
	
		
			
			
		
	
	
		
		
			
				
					
						
						
							
						
					
				
			
		
	


 ♦♦ Step four:自定义消息处理类

import org.springframework.data.redis.connection.Message;
import org.springframework.data.redis.listener.adapter.MessageListenerAdapter;
import org.springframework.stereotype.Component;

@Component
public class KeyExpiredNotice extends MessageListenerAdapter {

	/**
	 * msg : 通知消息,内含 key 
	 * topic : 管道类型
	 */
	@Override
	public void onMessage(Message msg, byte[] topic) {
		String key = new String(msg.getBody());
		// TODO 根据业务书写处理逻辑
		System.out.println(key);
		System.out.println(new String(topic));
	}
}

♦♦ Step five:测试

一:启动项目,断点调试

Spring+Reids 订阅键过期通知_第1张图片

二:连接客户端,设置键生存时间

 三:方法执行,查看打印结果

 

大体流程就是这样,下面总结一下自己实现该功能时遇到的一些问题

一:java.lang.NoSuchMethodError: org.springframework.util.Assert.isTrue(ZLjava/util/function/Supplier;)V

可能原因:spring-data-redis的版本和spring版本不兼容

网传 spring-data-redis 2的只支持spring5和spring boot2+ ,读者需要根据自己的开发环境,导入相应的版本依赖

二:java.lang.NoClassDefFoundError: redis/clients/util/Pool

可能原因:jedis版本过高,请尝试降低版本,查看是否继续报错

你可能感兴趣的:(redis)