当前位置: 首页 > news >正文

做企业网站有哪些系统山东seo

做企业网站有哪些系统,山东seo,政府网站建设制度,扶贫工作网站怎么做一,延迟任务应用场景? 一般用于处理订单,将redis中的数据延迟存入数据库,实现异步存储减少DB的压力 二, 延迟任务的实现方案有很多 DelayQueue Redisson MQ 时间轮 原理 JDK自带延迟队列,基于阻塞队列…

一,延迟任务应用场景?


一般用于处理订单,将redis中的数据延迟存入数据库,实现异步存储减少DB的压力

二, 延迟任务的实现方案有很多


DelayQueue

Redisson

MQ

时间轮

原理

JDK自带延迟队列,基于阻塞队列实现。

基于Redis数据结构模拟JDK的DelayQueue实现

利用MQ的特性。例如RabbitMQ的死信队列

时间轮算法

优点

  • 不依赖第三方服务

  • 分布式系统下可用

  • 不占用JVM内存

  • 分布式系统下可以

  • 不占用JVM内存

  • 不依赖第三方服务

  • 性能优异

缺点

  • 占用JVM内存

  • 只能单机使用

  • 依赖第三方服务

  • 依赖第三方服务

  • 只能单机使用

三,延迟任务的原理


 1,DelayQueue的源码

public class DelayQueue<E extends Delayed> extends AbstractQueue<E>implements BlockingQueue<E> {private final transient ReentrantLock lock = new ReentrantLock();private final PriorityQueue<E> q = new PriorityQueue<E>();// ... 略
}
  •  DelayQueue实现了BlockingQueue接口,是一个阻塞队列。队列就是容器,用来存储东西的.
  • DelayQueue的泛型定义

    • <E extends Delayed> 

  • 这说明存入DelayQueue内部的元素必须是Delayed类型

 进一步查看Delay接口

public interface Delayed extends Comparable<Delayed> {/*** Returns the remaining delay associated with this object, in the* given time unit.** @param unit the time unit* @return the remaining delay; zero or negative values indicate* that the delay has already elapsed*/long getDelay(TimeUnit unit);
}

看完之后我们先不管 ,继续看他的父类Comparable<Delayed>

里面有一个方法,用于比较大小

2,从源码中可以看出,Delayed类型必须具备两个方法:

  • getDelay():获取延迟任务的剩余延迟时间

  • compareTo(T t):比较两个延迟任务的延迟时间,判断执行顺序

    • 根据源码中的注解可以看出

      • zero or negative values indicate * that the delay has already elapsed

      • 零或者负值表示延迟已经过去

四,DelayQueue的用法


1,定义一个延迟任务的工具类

package com.tianji.learning.utils;import lombok.Data;import java.time.Duration;
import java.util.concurrent.Delayed;
import java.util.concurrent.TimeUnit;@Data
public class DelayTask<D> implements Delayed {private D data;    //用于存放延迟任务的数据private long deadlineNanos;    //延迟任务延迟到什么时候/***    delayTime    延迟多长时间*/public DelayTask(D data, Duration delayTime) {this.data = data;//用当前时间和需要延迟的时间相加得到的结果就是延迟任务延迟结束的时间this.deadlineNanos = System.nanoTime() + delayTime.toNanos();}/***    这个方法是用于获取延迟任务的剩余时间*/@Overridepublic long getDelay(TimeUnit unit) {return unit.convert(Math.max(0, deadlineNanos - System.nanoTime()), TimeUnit.NANOSECONDS);}//将队列中的延迟任务的剩余时间进行比较,然后进行排队@Overridepublic int compareTo(Delayed o) {long l = getDelay(TimeUnit.NANOSECONDS) - o.getDelay(TimeUnit.NANOSECONDS);if(l > 0){return 1;}else if(l < 0){return -1;}else {return 0;}}
}

2,使用延迟队列

// 1.初始化延迟队列
DelayQueue<DelayTask<String>> queue = new DelayQueue<>();
// 2.向队列中添加延迟执行的任务                        //当前延迟时间是Second
queue.add(new DelayTask<>("延迟任务数据,可以是方法", Duration.ofSeconds(延迟时间)));
// 3.尝试执行任务
DelayTask<String> task = queue.take();
//执行延迟队列中的任务
task.getData()

http://www.hrbkazy.com/news/43018.html

相关文章:

  • 北京网站建设课程培训班如何做seo整站优化
  • 在线之家兰州网站seo服务
  • 跟有流量的网站做友情链接企业推广网站
  • 推荐一下做年会视频的网站永久不收费的软件app
  • 广东省住房和城乡建设局网站aso搜索优化
  • 手机注册邮箱seo工资待遇怎么样
  • 中企做网站金华网站推广
  • 手机移动端网站开发台州百度关键词排名
  • 网站系统怎么做网站备案查询官网
  • 杭州外贸网站建设公司价格佛山百度seo点击软件
  • jsp做简单校园网站合肥seo网站管理
  • 高端网站建设的小知识上海seo关键词优化
  • 贵阳网站建设公司招聘软文推广例子
  • php毕业设计二手网站怎么做社交媒体营销
  • seo怎么做自己的网站app拉新渠道
  • 建设银行网盾进不去网站是怎么办中国万网域名注册服务内容
  • 凡客诚品网站特点搜索引擎排行榜前十名
  • 网站建设案列北京网站seo设计
  • 手机免费自建网站玉林seo
  • 奇趣网做网站成都专门做网络推广的公司
  • 政府网站建设管理典型经验材料网络营销有哪些推广方式
  • 怎样给自己建立网站百度网站优化公司
  • 长沙竹叶网络科技有限公司前端seo主要优化哪些
  • 那些网站专门做棋牌推广的企业网站设计服务
  • 学了lamp做网站就足够了吗营销策略手段有哪些
  • 做网站有现成的程序网站搜索引擎优化主要方法
  • 做php门户网站那个系统好竞价运营是做什么的
  • 客户在我这做的网站被罚合肥网络公司
  • 南沙做网站公司泰安做网站公司哪家比较好
  • 广州b2c网站设计公司2022年传销最新消息