jedis 模式实现redis广播模式
文章目录
前言
提示:这里可以添加本文要记录的大概内容:
项目背景是由于项目中很多表数据是存在redis缓存中,由于项目是多台机器部署,所以一个接口是无法实现多台机器同步刷新缓存,而且项目中没有用到MQ,即使用redis广播
提示:以下是本篇文章正文内容,下面案例可供参考
一、redis广播是什么?
Pub/Sub功能(means Publish, Subscribe)即发布及订阅功能。基于事件的系统中,Pub/Sub是目前广泛使用的通信模型,它采用事件作为基本的通信机制,提供大规模系统所要求的松散耦合的交互模式:订阅者(如客户端)以事件订阅的方式表达出它有兴趣接收的一个事件或一类事件;发布者(如服务器)可将订阅者感兴趣的事件随时通知相关订阅者。熟悉设计模式的朋友应该了解这与23种设计模式中的观察者模式极为相似,
二、使用步骤
1.首先引入所需要的jar包
2.需要实现监控器和订阅类型
代码如下(示例):
@Slf4j
@Component
public class RedisMessageConfig {
@Autowired
private ServerConfig serverConfig;
@Autowired
private RedisPubMessageListener redisPubMessageListener;
private ScheduledExecutorService scheduledExecutorService;
public static String CHANNEL="pzchannel";
public static String CHANNEL_MSG="flushRedisChannelMsg";
@PostConstruct
public void initRedisPub() {
timingThread(null);
}
private void timingThread(final Jedis jedis) {
try {
new Thread(new Runnable() {
@Override
public void run() {
RedisConnect redisConnect = SingleRedisConnect.getInstance(serverConfig);
JedisCluster jedisCluster = redisConnect.getJedisCluster();
log.info("初始化redis广播注册[同步阻塞线程]...");
jedisCluster.subscribe(redisPubMessageListener, CHANNEL);
}
}).start();
} catch (Exception e) {
log.error("初始化redis广播注册异常", e);
}
}
@PreDestroy
public void destroySingleThreadScheduledExecutor() {
try {
doDestroySingleThreadScheduledExecutor();
} catch (Throwable t) {
}
}
private void doDestroySingleThreadScheduledExecutor() throws InterruptedEx