Java监听redis缓存过期事件

专业挖坑 2017-04-01 10:54:06
Java调用redis的Sentinel,实现监听缓存到期事件。已有基础代码:
package com.ule.fenxiao.checkout.web.util;
import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import org.apache.log4j.Logger;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisNode;
import org.springframework.data.redis.connection.RedisSentinelConfiguration;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.listener.ChannelTopic;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
import org.springframework.data.redis.listener.Topic;
@Configuration
public class FxRedisCheckoutSentinel {
public static Logger logger = Logger.getLogger(FxRedisCheckoutSentinel.class.getName());
@Bean
public RedisSentinelConfiguration redisSentinelConfiguration() {
logger.info("redisSentinelConfiguration start...");
RedisSentinelConfiguration redisConfiguration = new RedisSentinelConfiguration();
redisConfiguration.setMaster("checkoutMaster");
redisConfiguration.addSentinel(new RedisNode("172.25.201.72", 6451));
redisConfiguration.addSentinel(new RedisNode("172.25.201.72", 6452));
redisConfiguration.addSentinel(new RedisNode("172.25.201.73", 6415));
redisConfiguration.addSentinel(new RedisNode("172.25.201.73", 6416));
logger.info("redisSentinelConfiguration end...");
return redisConfiguration;
}



package com.ule.fenxiao.checkout.web.util;
import org.apache.log4j.Logger;
import org.springframework.data.redis.connection.Message;
import org.springframework.data.redis.connection.MessageListener;
import org.springframework.data.redis.core.RedisTemplate;
public class KeyExpirsMessageListener implements MessageListener{
public static Logger logger = Logger.getLogger(KeyExpirsMessageListener.class.getName());
private RedisTemplate<String, String> redisTemplate;

public void setRedisTemplate(RedisTemplate<String, String> redisTemplate) {
this.redisTemplate = redisTemplate;
}

@Override
public void onMessage(Message message, byte[] pattern) {
byte[] body = message.getBody();
byte[] itemChannel = message.getChannel();
String itemValue = (String) redisTemplate.getValueSerializer().deserialize(body);
String itemChannelNew = (String) redisTemplate.getValueSerializer().deserialize(itemChannel);
logger.info("KeyExpirsMessageListener onMessage:channel["+itemChannelNew+"],message["+itemValue+"]");
}
}


项目启动的时候,在listener中加载
public void redisSentinel() {
log.info("redis缓存到期控制开始:");
new AnnotationConfigApplicationContext(FxRedisCheckoutSentinel.class);
}


启动日志输出redis缓存到期控制开始后就不在运行,项目启动失败,没有任何错误提示,有没有人了解这个的,帮忙指点指点
...全文
497 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

51,411

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧