多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[TOC] # 任务队列简介 ![](https://box.kancloud.cn/74d229854e314bd1e07b5617f3264cab_884x336.png) # 命令行 ![](https://box.kancloud.cn/b502571ea8b246d07844d6c48bb14ca9_410x302.png) # 常用 ## 增加 ~~~ jedis.lpushx("testList", "1,2,3,4,5,6,a,b,c,d,e,f");//向表插入数据,表不存在则忽略 jedis.lpush("testList", "1,2,3,4,5,6,a,b,c,d,e,f");//向表插入数据,表不存在就创建 jedis.linsert("testList", BinaryClient.LIST_POSITION.BEFORE, "e", "99");//在元素值是f的前面插入99 jedis.linsert("testList", BinaryClient.LIST_POSITION.AFTER, "f", "100");//在元素值是f的后面插入100 ~~~ ## 删除 ~~~ jedis.rpop("testList");//弹出 jedis.lrem("testList", 2, "d");//指令会删除count个值为value的元素; 如果count大于0则从头遍历;如果count小于0则从尾遍历;如果count等于0,删除链表中所有等于某个值的元素 ~~~ ## 修改 ~~~ jedis.lset("testList", 0, "aa");//修改指定索引号位置的值 ~~~ ## 查询 ~~~ jedis.lrange("testList", 0, 3);//查找某范围值 ~~~ # 例子 ## 生成队列-生产者 ~~~ //创建一个jedis客户端对象(redis的客户端连接) Jedis jedis = new Jedis("127.0.0.1", 6379); //设置auth密码 jedis.auth("root"); Random random = new Random(); while (true) { int nextInt = random.nextInt(1000); Thread.sleep(1000 + nextInt); //生成一个任务的id String taskid = UUID.randomUUID().toString(); jedis.lpush("task-queue", taskid); System.out.println("生成了一个任务" + taskid); } ~~~ ## 消耗队列 ~~~ @Test public void testList() throws InterruptedException { //其他方法 Jedis jedis = init(); Random random = new Random(); while (true) { //消耗速度 Thread.sleep(1500); //从任务队列中取出一个任务,同时放入到暂存队列中 String taskid = jedis.rpoplpush("task-queue", "tmp-queue"); //处理任务 if (random.nextInt(19) % 9 == 0) { //模拟失败 //失败情况下,需要将任务从暂存队列弹回任务队列 jedis.rpoplpush("tmp-queue", "task-queue"); System.out.println("该任务处理失败: " + taskid); } else { //模拟成功 //成功的情况下,只需要将任务从暂存队列清除 jedis.rpop("tmp-queue"); System.out.println("任务处理成功: " + taskid); } } } ~~~