开发过程中可使用redis实现过期消息的通知,话不多说直接上代码。
package com.lepu.config; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.data.redis.RedisProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import redis.clients.jedis.JedisPoolConfig; import redis.clients.jedis.JedisSentinelPool; import java.util.HashSet; /** * 超时订单配置 */ @Configuration public class OrderRedisConfig{ @Autowired RedisProperties redisProperties; @Value("${order.redis.database}") private Integer database; @Bean public JedisSentinelPool jedisSentinelPool(){ JedisPoolConfig config = new JedisPoolConfig(); JedisSentinelPool jedisPool = new JedisSentinelPool(redisProperties.getSentinel().getMaster(), new HashSet<>(redisProperties.getSentinel().getNodes()), config, 2000, (String) null, database); return jedisPool; } }
单独配置的连接
package com.lepu.listener; import com.lepu.dao.SubjectDao; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import redis.clients.jedis.JedisPubSub; import redis.clients.jedis.JedisSentinelPool; import javax.annotation.PostConstruct; /** * @description: RedisListener * @author: yanpengcheng * @date: 2021/8/27 11:43 */ @Component public class RedisListener{ @Autowired private RedisSub sub; @Value("${order.redis.database}") private Integer database; @Autowired JedisSentinelPool jedisSentinelPool; @PostConstruct void init(){ new Thread(new Runnable() { public void run() { jedisSentinelPool.getResource().subscribe(sub, "__keyevent@"+database+"__:expired"); } }).start(); } } @Component class RedisSub extends JedisPubSub { @Autowired SubjectDao subjectDao; /* * @description: 取消订单监听 * @param: null * @return: * @author: yanpengcheng * @date: 2021/8/27 */ public void onMessage(String channel, String message) { System.out.println(System.currentTimeMillis()+"ms:"+message+"订单取消"); } }
主要是在不影响已有redis连接的基础行指定具体的库的消息。