Reids 分布式锁使用
//1.连接缓存 Jedis jedis = JedisUtil.getJedis(); //2.查询缓存,有直接返回 String redisValue = jedis.get(key); //3.缓存没有,设置分布式锁 String token = UUID.randomUUID().toString(); Strig OK = redis.set("Key100Lock",token,"nx","px",10);//nx 只当键不存在时,才进行设置,px设置10毫秒过期 if(StringUtils.isNotBlank(OK)){//设置成功后 MessageVo dbResult = getDB();//查询数据库 if(dbResult!=nul){ jedis.set("key100Info",JSON.toJSONString(MessageVo))//查询到数据写入到缓存中 }else{ jedis.setex("key100Info",60,"");//查询不到,防止缓存穿透,将空字符串设置给redis } String LockToken = jedis.get(“Key100Lock”); if(StringUtils.isNotBlank(LockToken)&&LockToken.equals(token)){ //jedis.eval("lua"); 也可以用lua脚本,在查询到key同时,删除该key,防止高并发情况下意外发生 redis.del("Key100Lock");//用token确认删除的是自己的锁 } } else{//4.设置分布式锁失败,休眠几秒,尝试重新访问本方法 try { Thread.sleep(3000); } catch (InterruptedException e) { log.error(e.getMessage()); } return getRedi(skuId); }