Redis key过期监听

说明

redis key过期监听实际上是监听的(__keyevent@*__:expired)这个topic。

在使用redis key 过期通知一定要 开启key过期通知功能。

开启过期通知功能

  1. 编辑/etc/redis/redis.conf文件,添加或启用以下内容(过期通知):
notify-keyspace-events Ex
  1. 或者登陆redis-cli之后,输入以下命令:
config set notify-keyspace-events Ex

代码实现

添加依赖jar包

<dependency>
    <groupId>redis.clientsgroupId>
    <artifactId>jedisartifactId>
    <version>2.9.0version>
    <type>jartype>
    <scope>compilescope>
dependency>
<dependency>
    <groupId>org.springframework.datagroupId>
    <artifactId>spring-data-commonsartifactId>
    <version>1.13.6.RELEASEversion>
dependency>


<dependency>
    <groupId>org.springframework.datagroupId>
    <artifactId>spring-data-redisartifactId>
    <version>1.8.14.RELEASEversion>
dependency>

编写监听类 RedisKeyExpirationListener

public class RedisKeyExpirationListener extends KeyExpirationEventMessageListener {

	public RedisKeyExpirationListener(RedisMessageListenerContainer listenerContainer) {
		super(listenerContainer);
	}

	/**
	 * 针对redis数据失效事件,进行数据处理
	 * 
	 * @param message
	 * @param pattern
	 */
	@Override
	public void onMessage(Message message, byte[] pattern) {
		// 用户做自己的业务处理即可,注意message.toString()可以获取失效的key
		String expiredKey = message.toString();
		System.out.println("receive expire :" + expiredKey);
	}

}

配置监听

@Bean
RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) {
	RedisMessageListenerContainer container = new RedisMessageListenerContainer();
	container.setConnectionFactory(connectionFactory);
	return container;
}

@Bean
RedisKeyExpirationListener keyExpirationListener(RedisMessageListenerContainer listenerContainer) {
	return new RedisKeyExpirationListener(listenerContainer);
}

测试

@Test
public void testEx() {
	redisProxy.setValue("key_test2", "123",5);
	String value = redisProxy.getValue("key_test2");
	System.out.println(value);
	while(true) {
		
	}
}

参考

  • https://www.cnblogs.com/sunsing123/p/10304184.html

你可能感兴趣的:(框架)