- java配合redis完成延时任务
- 采用的是redis的
锁空间机制(Keysquare Notifications) - Key过期事件的Redis配置
redis.conf:notify-keyspace-events Ex,然后重启redis服务即可。
public class RedisTest {
private static final String REDIS_ADDRESS="127.0.0.1"; //host
private static final int REDIS_PORT=6379; //端口号
private static final String REDIS_AUTH="iostream"; //auth password
private static JedisPool jedisPool;
private static RedisSub sub;
static{
JedisPoolConfig config=new JedisPoolConfig();
config.setMaxTotal(10); //设置redis连接实例的数量 默认是8
jedisPool=new JedisPool(config,REDIS_ADDRESS,REDIS_PORT,Protocol.DEFAULT_TIMEOUT,REDIS_AUTH);
sub=new RedisSub();
}
//添加过期事件订阅
public static void init(){
new Thread(()-> jedisPool.getResource().subscribe(sub,"__keyevent@0__:expired")
).start();
}
public static void main(String[] args) {
init();
for (int i=0;i<10;i++) {
String orderId="OID00000"+(i+1);
jedisPool.getResource().setex(orderId,3,orderId);//设置三秒过期
System.out.println(System.currentTimeMillis()+" ms: "+orderId+"订单生成");
}
}
private static class RedisSub extends JedisPubSub{
@Override
public void onMessage(String channel, String message) {
System.out.println(System.currentTimeMillis()+" ms: "+message+"订单取消");
}
}
}
分布式之延时任务方案解析:个人感觉挺不错的一篇文章,对初学者来说
本文介绍使用Java结合Redis实现延时任务的方法,通过监听Key过期事件触发任务执行,适用于分布式环境。代码示例展示了如何配置Redis并利用其锁空间机制(KeysquareNotifications)来实现这一功能。
1810

被折叠的 条评论
为什么被折叠?



