Spring Boot Redis Key 过期事件监听 - 实践指南
在 Spring Boot 中,可以使用 Redis 的 key 过期事件来触发监听事件。以下是一种实现方式:\n\n1. 创建一个 RedisKeyExpirationListener 类,实现 MessageListener 接口,并重写 onMessage 方法。\n\njava\nimport org.springframework.data.redis.connection.Message;\nimport org.springframework.data.redis.connection.MessageListener;\n\npublic class RedisKeyExpirationListener implements MessageListener {\n\n @Override\n public void onMessage(Message message, byte[] pattern) {\n // 获取过期的 key\n String expiredKey = message.toString();\n \n // 处理过期事件\n // TODO: 处理逻辑\n }\n}\n\n\n2. 在 Spring Boot 的配置类中配置 RedisMessageListenerContainer,并设置 RedisKeyExpirationListener 为监听器。\n\njava\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\nimport org.springframework.data.redis.connection.RedisConnectionFactory;\nimport org.springframework.data.redis.listener.PatternTopic;\nimport org.springframework.data.redis.listener.RedisMessageListenerContainer;\n\n@Configuration\npublic class RedisConfig {\n\n @Bean\n public RedisMessageListenerContainer redisMessageListenerContainer(RedisConnectionFactory connectionFactory) {\n RedisMessageListenerContainer container = new RedisMessageListenerContainer();\n container.setConnectionFactory(connectionFactory);\n \n // 设置监听器\n container.addMessageListener(new RedisKeyExpirationListener(), new PatternTopic("__keyevent@*__:expired"));\n \n return container;\n }\n}\n\n\n3. 在 Redis 中设置 key 的过期时间。\n\njava\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.data.redis.core.RedisTemplate;\nimport org.springframework.stereotype.Service;\n\n@Service\npublic class RedisService {\n\n @Autowired\n private RedisTemplate<String, Object> redisTemplate;\n\n public void setKeyWithExpiration(String key, Object value, long expiration) {\n redisTemplate.opsForValue().set(key, value);\n redisTemplate.expire(key, expiration, TimeUnit.SECONDS);\n }\n}\n\n\n通过以上配置,当 Redis 中的 key 过期时,会触发 RedisKeyExpirationListener 类中的 onMessage 方法,可以在该方法中处理相应的逻辑。
原文地址: https://www.cveoy.top/t/topic/qEAa 著作权归作者所有。请勿转载和采集!