Redis数据结构list的任务队列
来源:互联网 发布:input type js修改 编辑:程序博客网 时间:2024/06/06 00:06
先搞一个队列,任务产生者,就一直往队列左边里塞啊塞,任务处理者就从右边第一个开始一个一个处理,理想是美好的,万一处理第一个时候出问题了,后面就没法继续处理了,所以就有了下面的图,先从这个第一个队列里取出右边的那个,放进第二个队列中,任务处理者从第二个队列中取出处理,如果处理成功就弹出,处理失败就弹回第一个队列的最左边,如下图:(自己写了个小demo)
public class TaskScheduler {
/**
* 任务生产者线程逻辑
*
* @QIANCC
*
*/
static class TaskProducer implements Runnable {
public void run() {
Jedis jedis = new Jedis("192.168.2.199");
System.out.println("任务生产者启动.......");
jedis.del("task-list");
while (true) {
UUID newTaskId = UUID.randomUUID();
jedis.lpush("task-list", newTaskId.toString());
System.out.println("生产者插入了一个新任务: " + newTaskId);
try {
int nextInt = new Random().nextInt(2);
Thread.sleep(1000 + nextInt * 1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
/**
* 任务处理者线程逻辑
*
* @QIANCC
*
*/
static class TaskWorker implements Runnable {
public void run() {
Jedis jedis = new Jedis("192.168.2.199");
System.out.println("任务处理者启动.......");
jedis.del("status-list");
while (true) {
try {
Thread.sleep(1000);
// 从task-list弹出一个任务,并插入到status-list队列中
String taskId = jedis.rpoplpush("task-list", "status-list");
// 处理任务的逻辑......
int nextInt = new Random().nextInt(9);
// 模拟任务处理成功的情况
if (nextInt % 4 != 0) {
// 从status-list队列中弹出这个处理成功的任务
jedis.lpop("status-list");
System.out.println(taskId + ": 处理成功,并从任务调度系统中彻底删除");
} else {
// 模拟任务处理失败的情况
jedis.rpoplpush("status-list", "task-list");
System.out.println(taskId + ": 处理失败,并从status-list中弹回task-list");
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
public static void main(String[] args) throws Exception {
new Thread(new TaskProducer()).start();
Thread.sleep(200);
new Thread(new TaskWorker()).start();
}
}
- Redis数据结构list的任务队列
- Redis的数据结构之List
- 【redis】任务队列
- 深入浅出Redis任务队列
- redis数据类型List的安全队列和不安全队列
- redis数据结构指南:list
- redis数据结构-list
- Redis数据结构-List
- 使用Redis实现任务队列
- Node.js + Redis Sorted Set 实现简单的任务队列
- redis(五)redis任务队列
- Redis中的List类型与消息队列的不同之处。
- Laravel 队列系列 —— 基于 Redis 实现任务队列的基本配置和使用
- Linux下Redis+crontab实现任务队列
- 七、Redis 基础命令---任务队列
- Redis研究(十五)—任务队列
- 使用Redis做任务队列(Golang)
- 「Redis学习笔记」任务队列
- MVC框架
- 计算机基础
- 水平居中总结-不定宽块状元素
- Java 操作基本数据类型的流
- 栈和队列考点
- Redis数据结构list的任务队列
- Programming学习1_ASP、JSP、PHP 、Perl、.NET 等WEB开发语言比较
- 英特套价11版 v17.5.17官方版下载附安装教程
- 【BZOJ1060】时态同步(ZJOI2007)-树形DP
- Hadoop安装详细教程,必看!!自己总结,供参考
- 栈的应用--进制转换
- WIN7下Docker的安装
- [NOIP模拟][BZOJ4264]小c找朋友
- Java 8 新特性——Stream API