| package com.genersoft.iot.vmp.conf; | 
|   | 
| import org.springframework.data.redis.connection.RedisConnection; | 
| import org.springframework.data.redis.listener.KeyExpirationEventMessageListener; | 
| import org.springframework.data.redis.listener.RedisMessageListenerContainer; | 
|   | 
| import java.util.Properties; | 
|   | 
| public class RedisKeyExpirationEventMessageListener extends KeyExpirationEventMessageListener { | 
|   | 
|     private UserSetting userSetting; | 
|     private RedisMessageListenerContainer listenerContainer; | 
|     private String keyspaceNotificationsConfigParameter = "EA"; | 
|   | 
|     public RedisKeyExpirationEventMessageListener(RedisMessageListenerContainer listenerContainer, UserSetting userSetting) { | 
|         super(listenerContainer); | 
|         this.listenerContainer = listenerContainer; | 
|         this.userSetting = userSetting; | 
|     } | 
|   | 
|     @Override | 
|     public void init() { | 
|         if (!userSetting.getRedisConfig()) { | 
|             // 配置springboot默认Config为空,即不让应用去修改redis的默认配置,因为Redis服务出于安全会禁用CONFIG命令给远程用户使用 | 
|             setKeyspaceNotificationsConfigParameter(""); | 
|         }else { | 
|   | 
|             RedisConnection connection = this.listenerContainer.getConnectionFactory().getConnection(); | 
|             Properties config = connection.getConfig("notify-keyspace-events"); | 
|             try { | 
|                 if (!config.getProperty("notify-keyspace-events").equals(keyspaceNotificationsConfigParameter)) { | 
|                     connection.setConfig("notify-keyspace-events", keyspaceNotificationsConfigParameter); | 
|                 } | 
|             } finally { | 
|                 connection.close(); | 
|             } | 
|         } | 
|         super.init(); | 
|     } | 
| } |