public String redis1(){
//分布式锁的使用模板
//这里可以使用随机数+uuid
String lockKey=“prou_001”;
String UUiD = UUID.randomUUID().toString();
try{
Boolean zhuyao = stringRedisTemplate.opsForValue().setIfAbsent(lockKey,UUiD);
//设置超时时间,这样写有个弊端就是上行代码挂了,这个不执行
stringRedisTemplate.expire(lockKey,10,TimeUnit.SECONDS);
//可以把上面代码整合,这里面是set方法,有的是setIfAbsent()方法,这个方法注意redis引用,我这个stringRedisTemplate没有这个方法
Boolean res= stringRedisTemplate.opsForValue().setIfAbsent(lockKey,UUiD,10,TimeUnit.SECONDS);
if(!res){
return “error”;
}
}catch (Exception e){
}finally {
//释放锁
if(UUiD.equals(stringRedisTemplate.opsForValue().get(lockKey))){
stringRedisTemplate.delete(lockKey);
}
}
return "end";
}
public String redis2(){
//分布式锁的使用模板
//这里可以使用随机数+uuid
String lockKey="prou_001";
String UUiD = UUID.randomUUID().toString();
RLock redissionLock= redission.getLock(lockKey);
try{
redissionLock.lock(10,TimeUnit.SECONDS)
}catch (Exception e){
}finally {
redissionLock.unLock();
}
return "end";
}
public String redis3(String appId, String apiKey, String secretKey) {
String accessToken = "";
try {
// 10s
boolean flag = jedisService.tryLock(BAIDUCLOUD_GET_ACCESS_TOKEN_KEY + appId, 10 * 1000l);
if (flag) {
try {
// 调取接口获取令牌信息
AccessTokenInfo accessTokenInfo = BaiduCloudInterface.getAccessToken(appId, apiKey, secretKey);
if (accessTokenInfo != null && StringUtils.isNotBlank(accessTokenInfo.getAccessToken())) {
accessToken = accessTokenInfo.getAccessToken();
// 设置缓存 == TODO 改为原子操作
stringRedisTemplate.opsForValue().set(BAIDUCLOUD_ACCESSTOKEN + appId, accessToken);
stringRedisTemplate.expire(BAIDUCLOUD_ACCESSTOKEN + appId, accessTokenInfo.getExpiresIn(),
TimeUnit.SECONDS);
}
} catch (Exception e) {
LOGGER.error("=====百度智能云==获取应用令牌发生异常==应用信息:{}, 异常信息=={}", appId + apiKey + secretKey, e);
} finally {
// 解锁
jedisService.unLock(BAIDUCLOUD_GET_ACCESS_TOKEN_KEY + appId);
}
return accessToken;
} else {
// 获取锁失败
try {
Thread.sleep(10000);// 10s
} catch (InterruptedException e) {
e.printStackTrace();
}
return stringRedisTemplate.opsForValue().get(BAIDUCLOUD_ACCESSTOKEN + appId);
}
} catch (Exception e) {
LOGGER.error("=====百度智能云==刷新令牌发生未知异常,应用信息:{} ====异常信息{}", appId + apiKey + secretKey, e);
}
return accessToken;
}