热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

聊聊jesque的几个dao

为什么80%的码农都做不了架构师?序本文主要聊一下jesque的几个daodao列表FailureDAOKeysDAOQueueInfoDAOWorkerInf

为什么80%的码农都做不了架构师?>>>   hot3.png

本文主要聊一下jesque的几个dao

dao列表

  • FailureDAO
  • KeysDAO
  • QueueInfoDAO
  • WorkerInfoDAO

FailureDAO

jesque-2.1.0-sources.jar!/net/greghaines/jesque/meta/dao/FailureDAO.java

/*** FailureDAO provides access to job failures.* * @author Greg Haines*/
public interface FailureDAO {/*** @return total number of failures*/long getCount();/*** @param offset offset into the failures* @param count number of failures to return* @return a sub-list of the failures*/List getFailures(long offset, long count);/*** Clear the list of failures.*/void clear();/*** Re-queue a job for execution.* @param index the index into the failure list* @return the date the job was re-queued*/Date requeue(long index);/*** Remove a failure from the list.* @param index the index of the failure to remove*/void remove(long index);
}

主要操纵的是namespace:failed,是一个list类型

  • count

使用llen方法获取队列长度

  • clear

使用del删除namespace:failed队列

  • getFailures

使用lrange命令查询

  • requeue

根据index取出failed job,重新设定retry时间,放到入队列中

  • remove

根据index删,使用lrem,这里是先lset一个随机值,再根据这个随机值lrem

KeysDAO

jesque-2.1.0-sources.jar!/net/greghaines/jesque/meta/dao/KeysDAO.java

/*** KeysDAO provides access to available keys.* * @author Greg Haines*/
public interface KeysDAO {/*** Get basic key info.* @param key the key name* @return the key information or null if the key did not exist*/KeyInfo getKeyInfo(String key);/*** Get basic key info plus a sub-list of the array value for the key, if applicable.* @param key the key name* @param offset the offset into the array* @param count the number of values to return* @return the key information or null if the key did not exist*/KeyInfo getKeyInfo(String key, int offset, int count);/*** Get basic info on all keys.* @return a list of key informations*/List getKeyInfos();/*** @return information about the backing Redis database*/Map getRedisInfo();
}

  • getKeyInfo

使用type获取类型

  • getKeyInfos

使用keys *方法

  • getRedisInfo

使用info

QueueInfoDAO

jesque-2.1.0-sources.jar!/net/greghaines/jesque/meta/dao/QueueInfoDAO.java

/*** QueueInfoDAO provides access to the queues in use by Jesque.* * @author Greg Haines*/
public interface QueueInfoDAO {/*** @return the list of queue names*/List getQueueNames();/*** @return total number of jobs pending in all queues*/long getPendingCount();/*** @return total number of jobs processed*/long getProcessedCount();/*** @return the list of queue informations*/List getQueueInfos();/*** @param name the queue name* @param jobOffset the offset into the queue* @param jobCount the number of jobs to return* @return the queue information or null if the queue does not exist*/QueueInfo getQueueInfo(String name, long jobOffset, long jobCount);/*** Delete the given queue.* @param name the name of the queue*/void removeQueue(String name);
}

  • getQueueNames

使用smembers方法操作namespace:queues

  • getPendingCount

对每个queue计算大小,分queue类型

private long size(final Jedis jedis, final String queueName) {final String key = key(QUEUE, queueName);final long size;if (JedisUtils.isDelayedQueue(jedis, key)) { // If delayed queue, use ZCARDsize = jedis.zcard(key);} else { // Else, use LLENsize = jedis.llen(key);}return size;}

延时队列使用的是zcard操作SortSet 非延时队列使用llen操作list

  • getProcessedCount

直接查询stat的string对象

  • getQueueInfos

顺带计算每个queue的大小

  • removeQueue

public void removeQueue(final String name) {PoolUtils.doWorkInPoolNicely(this.jedisPool, new PoolWork() {/*** {@inheritDoc}*/@Overridepublic Void doWork(final Jedis jedis) throws Exception {jedis.srem(key(QUEUES), name);jedis.del(key(QUEUE, name));return null;}});}

操作了queues以及queue两个对象

WorkerInfoDAO

jesque-2.1.0-sources.jar!/net/greghaines/jesque/meta/dao/WorkerInfoDAO.java

/*** WorkerInfoDAO provides access to information about workers.* * @author Greg Haines*/
public interface WorkerInfoDAO {/*** @return total number of workers known*/long getWorkerCount();/*** @return number of active workers*/long getActiveWorkerCount();/*** @return number of paused workers*/long getPausedWorkerCount();/*** @return information about all active workers*/List getActiveWorkers();/*** @return information about all paused workers*/List getPausedWorkers();/*** @return information about all workers*/List getAllWorkers();/*** @param workerName the name of the worker* @return information about the given worker or null if that worker does not exist*/WorkerInfo getWorker(String workerName);/*** @return a map of worker informations by hostname*/Map> getWorkerHostMap();/*** Removes the metadata about a worker.* * @param workerName* The worker name to remove*/void removeWorker(String workerName);
}

  • getAllWorkers

smembers操作namespace:workers

  • getActiveWorkers

smembers操作namespace:workers,然后过来出来state是working的

  • getPausedWorkers

smembers操作namespace:workers,然后过来出来state是paused的

  • getWorkerCount

直接scard操作namespace:workers

  • getActiveWorkerCount

smembers操作namespace:workers,然后过来出来state是working的

  • getPausedWorkerCount

smembers操作namespace:workers,然后过来出来state是paused的

  • getWorkerHostMap

smembers操作namespace:workers,然后按照host来分map 这个基本是万能的,其他的count基本是这个衍生出来

  • removeWorker

public void removeWorker(final String workerName) {PoolUtils.doWorkInPoolNicely(this.jedisPool, new PoolWork() {/*** {@inheritDoc}*/@Overridepublic Void doWork(final Jedis jedis) throws Exception {jedis.srem(key(WORKERS), workerName);jedis.del(key(WORKER, workerName), key(WORKER, workerName, STARTED), key(STAT, FAILED, workerName), key(STAT, PROCESSED, workerName));return null;}});}

操作works以及其他相关的对象


转载于:https://my.oschina.net/go4it/blog/1575699


推荐阅读
  • Java高并发与多线程(二):线程的实现方式详解
    本文将深入探讨Java中线程的三种主要实现方式,包括继承Thread类、实现Runnable接口和实现Callable接口,并分析它们之间的异同及其应用场景。 ... [详细]
  • 浅析python实现布隆过滤器及Redis中的缓存穿透原理_python
    本文带你了解了位图的实现,布隆过滤器的原理及Python中的使用,以及布隆过滤器如何应对Redis中的缓存穿透,相信你对布隆过滤 ... [详细]
  • 如何在Java中使用DButils类
    这期内容当中小编将会给大家带来有关如何在Java中使用DButils类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。D ... [详细]
  • JUC(三):深入解析AQS
    本文详细介绍了Java并发工具包中的核心类AQS(AbstractQueuedSynchronizer),包括其基本概念、数据结构、源码分析及核心方法的实现。 ... [详细]
  • 本文将带你快速了解 SpringMVC 框架的基本使用方法,通过实现一个简单的 Controller 并在浏览器中访问,展示 SpringMVC 的强大与简便。 ... [详细]
  • DAO(Data Access Object)模式是一种用于抽象和封装所有对数据库或其他持久化机制访问的方法,它通过提供一个统一的接口来隐藏底层数据访问的复杂性。 ... [详细]
  • 本文详细介绍了在 CentOS 7 系统中配置 fstab 文件以实现开机自动挂载 NFS 共享目录的方法,并解决了常见的配置失败问题。 ... [详细]
  • Spring Boot 中配置全局文件上传路径并实现文件上传功能
    本文介绍如何在 Spring Boot 项目中配置全局文件上传路径,并通过读取配置项实现文件上传功能。通过这种方式,可以更好地管理和维护文件路径。 ... [详细]
  • 本文总结了一些开发中常见的问题及其解决方案,包括特性过滤器的使用、NuGet程序集版本冲突、线程存储、溢出检查、ThreadPool的最大线程数设置、Redis使用中的问题以及Task.Result和Task.GetAwaiter().GetResult()的区别。 ... [详细]
  • 利用 JavaScript 和 Node.js 验证时间的有效性
    本文探讨了如何使用 JavaScript 和 Node.js 验证时间的有效性。通过编写一个 `isTime` 函数,我们可以确保输入的时间格式正确且有效。该函数利用正则表达式匹配时间字符串,检查其是否符合常见的日期时间格式,如 `YYYY-MM-DD` 或 `HH:MM:SS`。此外,我们还介绍了如何处理不同时间格式的转换和验证,以提高代码的健壮性和可靠性。 ... [详细]
  • 构建基础的字符串队列实现方法
    在探讨如何构建基础的字符串队列实现方法时,我们发现许多开发者在面对这一问题时常常感到困惑。实际上,队列的基本原理非常简单,即遵循先进先出的原则。然而,在具体实现过程中,需要注意的是Java语言中并没有指针的概念,因此需要通过嵌套类来模拟指针,进而构建链表结构。这种实现方式不仅能够有效地管理字符串数据,还能提升代码的可读性和维护性。 ... [详细]
  • Python多线程编程技巧与实战应用详解 ... [详细]
  • ### 优化后的摘要本学习指南旨在帮助读者全面掌握 Bootstrap 前端框架的核心知识点与实战技巧。内容涵盖基础入门、核心功能和高级应用。第一章通过一个简单的“Hello World”示例,介绍 Bootstrap 的基本用法和快速上手方法。第二章深入探讨 Bootstrap 与 JSP 集成的细节,揭示两者结合的优势和应用场景。第三章则进一步讲解 Bootstrap 的高级特性,如响应式设计和组件定制,为开发者提供全方位的技术支持。 ... [详细]
  • C++ 异步编程中获取线程执行结果的方法与技巧及其在前端开发中的应用探讨
    本文探讨了C++异步编程中获取线程执行结果的方法与技巧,并深入分析了这些技术在前端开发中的应用。通过对比不同的异步编程模型,本文详细介绍了如何高效地处理多线程任务,确保程序的稳定性和性能。同时,文章还结合实际案例,展示了这些方法在前端异步编程中的具体实现和优化策略。 ... [详细]
  • 本文探讨了如何利用Java代码获取当前本地操作系统中正在运行的进程列表及其详细信息。通过引入必要的包和类,开发者可以轻松地实现这一功能,为系统监控和管理提供有力支持。示例代码展示了具体实现方法,适用于需要了解系统进程状态的开发人员。 ... [详细]
author-avatar
yangxin
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有