Redis配置缓存过期监听事件触发
1、配置redis.conf文件中的notify-keyspace-events Ex2、配置完之后重启redis服务,运行以下代码,开新的窗口设置时效性的键值对,等待它过期发现监听窗口出现信息提式,注意返回的是这个键值对的key不是value,这个后续使用设备号来做key的话过期就可以提取出这个设备Key去关掉它的电源灯来做给用户的一个提示。3、springboot里需要做的配置类过期触发的业务
·
1、配置redis.conf文件中的notify-keyspace-events Ex
2、配置完之后重启redis服务,运行以下代码,开新的窗口设置时效性的键值对,等待它过期发现监听窗口出现信息提式,注意返回的是这个键值对的key不是value,这个后续使用设备号来做key的话过期就可以提取出这个设备Key去关掉它的电源灯来做给用户的一个提示。
3、springboot里需要做的配置类
/**redis缓存配置类*/
@Configuration
public class RedisConfig extends CachingConfigurerSupport {
@Bean
RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) {
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
return container;
}
}
过期触发的业务逻辑(注意里面关闭电源的方式与前面的文章都是连在一块的业务逻辑)
@Component
public class RedisListener extends KeyExpirationEventMessageListener {
@Autowired
private UserDeviceService userDeviceService;
@Autowired
private DeviceService deviceService;
@Autowired
private PubMessage pubMessage;
public RedisListener(RedisMessageListenerContainer listenerContainer) {
super(listenerContainer);
}
/**
* 针对redis数据失效事件,进行数据处理
*
* @param message
* @param pattern
*/
@Override
public void onMessage(Message message, byte[] pattern) {
/**当名为expiredKey的键值对过期了,会把key返回,而不会将value返回*/
String expiredKey = message.toString();
try {
/**首先修改订单使用时间为0*/
boolean updateExOrder = userDeviceService.updateExOrder(expiredKey);
/**其次将设备的锁装置与设备状态释放掉*/
deviceService.freeDeviceByDeviceId(expiredKey);
/**最后向设备查询设备电源状态,如果状态为开则发送关闭指令*/
boolean power = deviceService.findDevicePowerByDeviceId(expiredKey);
if (power) {
/**订单过期,现在关闭端口电源通断*/
pubMessage.sendDownMessage(expiredKey);
/**数据库里记录的电源还开着,所以我们需要将数据库表中的电源关掉**/
boolean downDevicePowerByDeviceId = deviceService.downDevicePowerByDeviceId(expiredKey);
if (!downDevicePowerByDeviceId)
throw new Exception("数据库power更改异常");
}
if (!updateExOrder) {
throw new Exception("订单过期处理失败");
}
} catch (Exception e) {
System.out.println("---------处理过期订单业务失效---------");
}
System.out.println(expiredKey + "订单过期--------------------");
}
}
更多推荐
已为社区贡献10条内容
所有评论(0)