我的开源:redis阻塞队列执行器
1. 开源项目地址
2. 为什么写这个
出于使用简洁代码以满足业务需求的目的,避免重复写业务无关的代码,我对redis阻塞队
列使用过程中的通用性代码进行了封装,并且增加了一些特性。
3. 使用者需要做的事情
实现RedisTemplate接口,向队列添加元素,添加元素处理者.
4. 特性
-
redis本身的高性能、高可用; redis阻塞队列的阻塞和分发特性; 周期概念 从将所有待处理元素批量加入到阻塞队列,直到这些元素被处理完毕,称为一个周期; 可记录周期完毕状态; 可在周期完毕时进行回调; 记录处理失败的数量; 元素不会丢失 正在处理队列。消费者获取元素后,元素进入正在处理队列,完毕后从该队列删除。 检查机制。考虑的场景:消费者处理元素过程中,由于重启或宕机,导致元素未被处理。 元素存储在redis队列,对比服务端使用线程池,不必考虑队列长度、数据丢弃策略。 资源充分利用 服务器集群消费阻塞队列,对比单机使用线程池,资源利用更充分。 处理进度概要
5. 图示
6. 使用场景
-
分片处理 ,集群处理一批数据 比 单实例 快很多; 依赖关系,周期A处理完毕,触发周期B开始,……; 普通的阻塞队列使用场景;
7. 代码实例
// 第一步 实现 RedisTemplate public class RedisTemplateImpl implements RedisTemplate{ // ... }
// 第二步 向阻塞队列添加元素 // 与profile相关的环境标志 String env; String blockKey = RedisBlockListUtils.getBlockListKey("自定义队列名称", env); // 准备待处理元素 List<String> params; // 作为新周期 RedisBlockListExecutor.add4NewPeriod(new RedisTemplateImpl(), blockKey, params); // 不适用周期 // RedisBlockListExecutor.add(new RedisTemplateImpl(), blockKey, params, false/true);
上一篇:
通过多线程提高代码的执行效率例子