`
pzzy2000
  • 浏览: 25502 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

redis lits queue 和 ThreadPoolExecutor 结合

 
阅读更多

 

今天遇到一个 ThreadPoolExecutor 队列 问题。

 

需求如下:

1:处于成本和人员技术水平限制,不可能采用高大上的系统。

2:项目周期短。

3:队列必须顺序取出,同时过滤掉超时数据。

4:多个系统。

 

实现原理:

1:public class CameraRequestQueue implements BlockingQueue<Runnable> ;

     继承BlockingQueue<Runnable> ;

2:public class RedisCameraRequestQueue extends CameraRequestQueue 

      继承CameraRequestQueue ;

3:实现 如下方法:

     @Override

public int size() {

return  Redis List Queue Size ;

 

}

 

@Override

public boolean isEmpty() {

return  Redis List Queue isEmpty();

 

}

 

// 获取并移除此队列的头部,在元素变得可用之前一直等待(如果有必要)。

@Override

public ExRunnable take() throws InterruptedException {

 

CameraRequestBean msg = Redis List Queue .take();

if (msg == null) {

return null;

} else {

ExRunnable iExRunnable = new ExRunnable(msg, cameraRequestHandFactory);

iExRunnable.setPublicMediaService(publicMediaService);

return iExRunnable;

}

}

 

@Override

public int remainingCapacity() {

 

return Integer.MAX_VALUE;

}

 

3:线程池:

ThreadPoolExecutor executor = new ThreadPoolExecutor(initCount, MAX_SIZE, 5, TimeUnit.MILLISECONDS,redisCameraRequestQueue, new CameraRequestHandThreadFactory(),

 

new ThreadPoolExecutor.AbortPolicy());

 

4:初始化:

     executor.prestartAllCoreThreads();

 

5:public class ExRunnable implements Runnable 。

      //具体实现处理数据的方法实现。

 

 

这时:当有其他系统有数据插入到对应的redis list queue 时,本方法,可以自动从redis list queue 中取出数据。

1:优点:方便,代码简介,一般的开发人员都能实现。

2:不足:

      1:此方法暂时不能保证重要性数据的正确执行。

      2:在关闭线程池的时候,可能会掉数据。

      3:本方法还没在redis lits queue 集群里面测试过。(因没有多余的服务器来搭建系统)。

      4:ThreadPoolExecutor  本身有线程不停的从 redis list queue 取出数据,可能会有一些性能损耗。

 

本人:使用场景:

           1:2000多个摄像头排队调用,如果调用方调用失败可以重新排队调用。

           2:发送UDP数据。

 

以下是关键代码。redis 插入数据。这里就不提供了。

 

 

 

 

 

分享到:
评论
1 楼 pzzy2000 2018-11-19  
只是初步实现,还有许多地方没有考虑周全,只是实现了初步功能

相关推荐

    PyPI 官网下载 | redis-queue-tool-4.1.5.tar.gz

    总的来说,Redis Queue Tool 4.1.5是一个强大且易用的Python库,它为开发人员提供了一种高效的方式来管理任务队列,特别是在需要高并发处理和任务持久化的场景下,RQT的表现尤为出色。无论是小型项目还是大型分布式...

    redis-queue:Redis 支持的 FIFO 队列的 Go 实现

    Go 发行版和 (Redis 的 Go 客户端)是唯一的依赖项。 样品 单队列客户端 package main import "flag" import "fmt" import "log" import "github.com/skidder/redis-queue/rq" var ( redisServer = flag . String...

    redis-queue:基于Redis的分布式队列

    添加Redis :: Queue类,该类可用作基于Redis的Distributed-Queue。 Redis通常用作消息传递服务器,以实现对后台作业或其他类型的消息传递任务的处理。 它实现了此处描述的可靠队列模式: ://redis.io/commands/...

    redis-queue-stream:redis 流的消息队列

    支持 Redis &gt;= 5.0.0 和 (Node.js &gt;= 8)。快速开始安装$ npm install redis-queue-stream基本用法 const redisQueue = require ( 'redis-queue-stream' ) ;const RedisQ = new redisQueue ( config , option ) ;...

    Python库 | redis-queue-tool-4.3.2.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:redis-queue-tool-4.3.2.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    flask-redis-queue:如何使用Flask,Redis Queue和Docker处理后台进程的示例

    如何使用Flask,Redis Queue和Docker处理后台进程的示例 快速开始 旋转容器: $ docker-compose up -d --build 将浏览器打开到来查看应用程序,或者打开来查看RQ仪表板。 是否想学习如何构建? 查看。

    Go-delay-queue基于Redis实现的延迟队列

    总的来说,这个Go延迟队列项目结合了Go语言的并发优势和Redis的数据结构特性,提供了一种灵活、可扩展的解决方案,适用于各种需要延迟处理任务的场景。对于希望深入理解延迟队列或者在自己的项目中应用延迟队列的...

    Python库 | redis_queue_tool-4.0.7-py3-none-any.whl

    资源分类:Python库 所属语言:Python 资源全名:redis_queue_tool-4.0.7-py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    redisQueue.rar

    在本项目 "redisQueue.rar" 中,我们关注的是如何利用 PHP 进行 Redis 消息队列的实现,这涉及到 PHP 的 Redis 扩展以及消息队列的基本概念和工作原理。 首先,让我们了解一下什么是消息队列。消息队列是一种异步...

    node-redis-queue:这个面向消息的中间件提供的简单队列和工作队列

    节点redis-queue概述这是一个非常简单的 Redis 队列包装器,用于不同进程之间的通信。 它带有两个 API: Channel——推送/弹出界面该过程创建了 Channel 的一个实例。 发送进程使用 Channel 实例通过push函数将数据...

    python-redis-queue-sample:python redis任务队列demo, 自备

    任务队列 环境准备 Python Redis # pip install -i http://pypi.douban.com/simple redis RQ ...Redis Server # docker pull redis:latest # docker run -d -p 6379:6379 -t redis:...from rq import Queue from rq.j

    Python库 | redis_queue_tool-4.3.0-py3-none-any.whl

    资源分类:Python库 所属语言:Python 资源全名:redis_queue_tool-4.3.0-py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    redisqueue:redisqueue提供使用Redis流的队列的生产者和使用者

    重新排队 redisqueue提供使用的队列的生产者和消费者。特征Producer结构使入队消息变得容易。 Consumer结构可以并发处理消息。 如果没有错误,则声明并确认消息,这样,如果消费者在处理过程中死亡,则不会丢失正在...

    redis-priority-queue:具有添加功能的简单Redis工作队列(优先级,一次弹出多个项目)

    Redis优先级队列 redis-priority-queue是一个简单的工作队列,类似于具有以下新增功能: 可以添加具有优先级的项目(介于-9007199254740992和9007199254740992之间) 队列会自动进行重复数据删除(重复的项目在推送...

    node-js-redis-queue

    标题“node-js-redis-queue”表明我们正在讨论一个基于Node.js和Redis的队列系统。这个系统可能用于处理后台任务、批量操作或者实现异步处理。Node.js是JavaScript的一个运行环境,它允许开发者在服务器端使用...

    redis和redisdesktop

    总的来说,Redis和RedisDesktop的结合使用,为开发者提供了高效、便捷的数据存储和管理解决方案。无论是用于缓存、消息队列还是其他用途,Redis的高性能和丰富功能,加上RedisDesktop的直观操作,都是IT行业中不可或...

    Qt 应用Redis 实现消息队列

    5. **异常处理**:考虑到网络问题和Redis服务可能出现的异常,需要在代码中添加适当的错误处理和重试机制,确保消息的可靠传输。 6. **性能优化**:根据应用需求,可能需要考虑消息批量处理、预取策略以及超时设定...

    php队列+php-redis队列+php-redis扩展

    总结起来,PHP队列结合PHP-Redis扩展,提供了一种高效、灵活的后台任务处理方式,适用于各种高并发和异步需求。了解并掌握这一技术,对于提升PHP应用程序的稳定性和效率具有重要意义。在实际项目中,可以根据具体...

Global site tag (gtag.js) - Google Analytics