redis锁等待随机毫秒数拦截和程序自动过期双重机制
上一个操作加了锁,需要等待上一个操作执行完毕之后,才允许当前操作执行,所以当前操作需要执行锁等待处理。
package com.example.core.mydemo.javaDemo; import java.time.LocalDateTime; public class RandomTest { public static void main(String[] args) { //1秒以内的随机毫秒数 for (int i = 0; i < 10;i++) { long time = (long) (Math.random() * 1000); System.out.println("time=" + time); } // String redisKey = "myKey:" + dto.getOrdernumber(); // Boolean haskey = stringRedisTemplate.hasKey(redisKey); Boolean hasKey = true; LocalDateTime startTime = LocalDateTime.now(); LocalDateTime endTime = startTime.plusSeconds(5); //已被锁定,直接返回,等待 while (hasKey && (startTime.isBefore(endTime) || startTime.isEqual(endTime)) ) { try { long time = (long) (Math.random() * 1000); Thread.sleep(time); //重新查询 // haskey = stringRedisTemplate.hasKey(redisKey); //重新刷新时间 startTime = LocalDateTime.now(); // log.info("判断锁存在,orderNo=[{}],haskey=[{}],waitTime=[{}]",dto.getOrdernumber(),haskey,time); System.out.println("waitTime="+time+",startTime="+startTime+",endTime="+endTime); } catch (InterruptedException e) { // log.error("exceotion:",e); e.printStackTrace(); } } } }
标签:hasKey,过期,time,redis,long,毫秒,startTime,LocalDateTime,endTime From: https://www.cnblogs.com/oktokeep/p/18573218