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

dnf怎么做提卡网站优秀网站主题

dnf怎么做提卡网站,优秀网站主题,wordpress301不能用,如何查询网站的建设商文章目录 前言步骤查看结果 前言 分布式系统常需要全局唯一的数字作为id#xff0c;且该id要求有序#xff0c;twitter的SnowFlake解决了这种需求#xff0c;生成了符合条件的这种数字#xff0c;本文将提供一个接口获取雪花算法数字。以下为代码。 步骤 SnowFlakeUtils … 文章目录 前言步骤查看结果 前言 分布式系统常需要全局唯一的数字作为id且该id要求有序twitter的SnowFlake解决了这种需求生成了符合条件的这种数字本文将提供一个接口获取雪花算法数字。以下为代码。 步骤 SnowFlakeUtils 雪花算法工具类 Slf4j public class SnowFlakeUtils {private static final RedisOperation REDIS_OPERATION ApplicationContextHelper.getBean(RedisOperation.class);private static final String LOCAL_IP getLocalIp();private static volatile SnowFlakeUtils instance;/*** 该任务开始时间,必须手动设置(差值的唯一性)* 建议在生产部署时选择某一日的0时0分0秒0毫秒的时间戳,方便计算*/private static final long START_TIME 1588733692671L;/*** 各个位的位数,Timestamp为41L(无需定义)*/private static final long DATA_CENTER_ID_BITS 5L;private static final long WORKER_ID_BITS 1L;private static final long SEQUENCE_BITS 16L;/*** 各位的最大值*/private static final long DATA_CENTER_ID_MAX ~(-1 DATA_CENTER_ID_BITS);private static final long WORKER_ID_MAX ~(-1 WORKER_ID_BITS);private static final long SEQUENCE_MAX ~(-1 SEQUENCE_BITS);/*** 各位应该向左移动位数*/private static final long TIMESTAMP_SHIFT SEQUENCE_BITS WORKER_ID_BITS DATA_CENTER_ID_BITS;private static final long DATA_CENTER_ID_SHIFT SEQUENCE_BITS WORKER_ID_BITS;private static final long WORKER_ID_SHIFT SEQUENCE_BITS;/*** 数据中心ID*/private final long dataCenterId;private static final String DATA_CENTER_ID DATACENTERID;/*** 工作线程ID*/private final long workerId;private static final String WORKER_ID WORKERID;/*** 序列号*/private long sequence 0L;/*** 上次时间(保证不回退)*/private long lastTimestamp -1L;/**** 是否在高并发下*/private boolean isClock false;public static SnowFlakeUtils getInstance() {if (instance null) {synchronized (SnowFlakeUtils.class) {if (instance null) {int dataCenterId 0;int workerId 0;while (true) {// tryCatch保证即使redis等出现问题也可以保证当前线程阻塞,重启redis即可处理继续处理try {String replace RedisKeyConstant.SNOW_FLAKE_KEY.replace(DATA_CENTER_ID, String.valueOf(dataCenterId)).replace(WORKER_ID, String.valueOf(workerId));if (REDIS_OPERATION.setnx(replace, LOCAL_IP, 1, TimeUnit.MINUTES)) {instance new SnowFlakeUtils(dataCenterId, workerId);break;}// 进行重新set直至成功,目前只运用dataCenterIdif (dataCenterId DATA_CENTER_ID_MAX) {log.error(SnowFlake is getting CacheLock, please checkDATACENTERID_MAX{}, DATA_CENTER_ID_MAX);dataCenterId 0;}} catch (Exception e) {log.error(SnowFlakeUtils get CacheLock Error, errorMsg:, e);try {Thread.sleep(MagicNum.THOUSAND);} catch (InterruptedException ex) {log.error(ex.getMessage(), ex);}}}}}}return instance;}public SnowFlakeUtils(long dataCenterId, long workerId) {if (dataCenterId DATA_CENTER_ID_MAX || dataCenterId 0) {throw new IllegalArgumentException(String.format(data center id cant be greater than %d or less than 0, DATA_CENTER_ID_MAX));}if (workerId WORKER_ID_MAX || workerId 0) {throw new IllegalArgumentException(String.format(worker id cant be greater than %d or less than 0, WORKER_ID_MAX));}this.dataCenterId dataCenterId;this.workerId workerId;String key RedisKeyConstant.SNOW_FLAKE_KEY.replace(DATA_CENTER_ID, String.valueOf(dataCenterId)).replace(WORKER_ID, String.valueOf(workerId));log.info(SnowFlakeUtils Cache Key{}, key);// 起线程保证workerId和dataCenter组合不重复Thread thread new Thread(new Runnable() {Overridepublic void run() {while (true) {try {log.debug(SnowFlakeUtils is keep geting CacheLock-{}, key);String localIp REDIS_OPERATION.get(key);if (LOCAL_IP.equals(localIp)) {REDIS_OPERATION.setex(key, LOCAL_IP, 1, TimeUnit.MINUTES);} else if (!REDIS_OPERATION.setnx(key, LOCAL_IP, 1, TimeUnit.MINUTES)) {throw new ProcessException(CommonConstants.ENUM_PROCESSING_EXCEPTION,SnowFlakeUtils losed CacheLock- key . CacheLockKeeperThread broken! Reday to retrieve CacheLock and Single Instance!);}Thread.sleep(MagicNum.FIFTY * MagicNum.THOUSAND);} catch (Exception e) {// 发生异常 将单例清除 并退出循环结束子线程synchronized (SnowFlakeUtils.class) {instance null;}log.error(e.getMessage(),e);break;}}}});thread.setName(SnowFlake-CacheLockKeeper- dataCenterId - workerId);thread.start();}public void setClock(boolean clock) {this.isClock clock;}public synchronized long nextId() {long timestamp this.getTime();if (timestamp lastTimestamp) {long offset lastTimestamp - timestamp;if (offset MagicNum.FIVE) {try {this.wait(offset 1);timestamp this.getTime();if (timestamp lastTimestamp) {throw new RuntimeException(String.format(Clock moved backwards, Refusing to generate id for %d milliseconds, offset));}} catch (InterruptedException e) {log.error(e.getMessage(), e);}} else {throw new RuntimeException(String.format(Clock moved backwards, Refusing to generate id for %d milliseconds, offset));}}if (lastTimestamp timestamp) {sequence sequence 1;if (sequence SEQUENCE_MAX) {timestamp tilNextMillis(timestamp);sequence 0;}} else {sequence 0;}lastTimestamp timestamp;return ((timestamp - START_TIME) TIMESTAMP_SHIFT) |(dataCenterId DATA_CENTER_ID_SHIFT) |(workerId WORKER_ID_SHIFT) |sequence;}/*** 该毫秒达到上限,等待到下1毫秒*/private long tilNextMillis(long timestamp) {while (getTime() timestamp) {log.debug(单毫秒主键生成达到上限);}return this.getTime();}private long getTime() {if (isClock) {return SystemClock.currentTimeMillis();} else {return System.currentTimeMillis();}}private static String getLocalIp() {String ip ;try {InetAddress addr InetAddress.getLocalHost();ip addr.getHostAddress();} catch (Exception e) {ip 127.0.0.1;}ip _ System.currentTimeMillis() _ Math.random();log.info(SnowFlakeUtils Cache Value{}, ip);return ip;} }SystemClock /*** 由于高并发,在同一毫秒中会多次获取currentTimeMillis,而每次使用System.currentTimeMillis都会占用CPU(native方法).* 于是自定义类(single)来获取currentTimeMillis,实现方法是在此类中定义时间并设置一个周期任务(定时线程)1毫秒更新类中的时间*/ public final class SystemClock {private static final SystemClock INSTANCE new SystemClock(1);public static SystemClock getInstance() {return INSTANCE;}/*** 更新时间的时间间隔,默认为1毫秒*/private final long period;/*** 当前时间*/private final AtomicLong now;private SystemClock(long period) {this.period period;this.now new AtomicLong(System.currentTimeMillis());scheduleClockUpdate();}/*** 定时任务(设置为守护线程,1毫秒后开始更新)* scheduleAtFixedRate: 每次开始间隔为1毫秒* scheduleWithFixedDelay: 每次结束与开始为1毫秒*/private void scheduleClockUpdate() {ScheduledExecutorService executorService Executors.newSingleThreadScheduledExecutor(new ThreadFactory() {Overridepublic Thread newThread(Runnable r) {Thread thread new Thread(r, System Clock);thread.setDaemon(true);return thread;}});executorService.scheduleAtFixedRate(new Runnable() {Overridepublic void run() {now.set(System.currentTimeMillis());}}, period, period, TimeUnit.MILLISECONDS);}public static long currentTimeMillis() {return getInstance().now.get();} }ApplicationContextHelper Slf4j Component public class ApplicationContextHelper implements ApplicationContextAware { /** * Spring上下文 */ private static ApplicationContext applicationContext;/*** return ApplicationContext*/public static ApplicationContext getApplicationContext() {return applicationContext;}/*** 获取ApplicationContextAware**/Overridepublic void setApplicationContext(ApplicationContext applicationContext) {ApplicationContextHelper.applicationContext applicationContext;}/*** 根据Class获取对应实例**/public static T T getBean(ClassT clz) {return applicationContext.getBean(clz);}/*** 根据beanName获取对应实例*/public static T T getBean(String name, ClassT requiredType) {return applicationContext.getBean(name, requiredType);}public static Object getBean(String name) {return applicationContext.getBean(name);} }RedisOperation获取RedisOperationRedis操作工具类 在Controller里编写接口 RestController RequestMapping(/part/util) public class UtilController {ApiOperation(获取雪花数字)GetMapping(/getSnowFlakeNo)public Result getSnowFlakeNo() {return Result.ok().data(String.valueOf(SnowFlakeUtils.getInstance().nextId()));} }查看结果 启动项目有postman访问接口查看结果如下返回结果中data的值即为雪花算法数字。
http://www.zqtcl.cn/news/805908/

相关文章:

  • 互联网网站商标免费做h5的网站有哪些
  • 营销型网站五大系统 单仁深圳住房与建设局官网
  • nas 做网站wordpress音乐门户主题
  • 企业邮箱163登录入口seo建站需求
  • 外贸企业网站源码下载域名和服务器多少钱
  • 镇江专业建网站建设外汇网站
  • 网站关键词优化软件效果wordpress如何网站顶部右侧广告
  • seo整站优化报价wordpress网站资源
  • 假冒彩票网站开发仿小刀娱乐wordpress主题
  • 东光做淘宝网站古色古香的网站模板
  • 创建网站得花多少钱福州最好的网站建设
  • mysql asp网站开发企业失信被执行人查询
  • 网站制作完工验收单软件开发模型有哪几种
  • saas建站平台源码wordpress 安装主题 无法创建目录
  • 兰州做高端网站做网站学什么专业
  • dedecms 图片网站模板wordpress省市联动
  • pw域名网站杭州建站官网建设
  • 河北省建设厅网站官网网站js时间代码
  • 网站开发实现编码深圳做网站专业
  • 网站建设电子合同h5网站开发多少钱
  • 邓州做网站投票网站做seo如何
  • 环保网站建设项目备案系统免费虚拟主机空间
  • 网站实现语言转换技术上该怎么做免费下载网页模板
  • 云南网站建设专业品牌网站建设电子商务
  • 保健食品东莞网站建设莱芜金点子信息港交友
  • 小程序视频网站开发网站开发项目预算表
  • 邢台手机网站建设价格iis 手机网站
  • 网站开发流程三大部分微信学校网站模板
  • 网站推荐正能量专业做网站多少钱
  • 网站界面设计总结淘客手机端网站建设