【导读】 即时通讯的意思是什么,下面是小编为你收集整理的,希望对你有帮助!即时通讯是什么意思即时通讯(InstantMessaging)是目前Internet上最为流行的通讯方式,各种各样的即时通讯软件也层出不穷。服务提供商也提供了越来越丰富的通讯服务功能。因特网(Inte......
发布时间:2023-10-22 10:31:06
/**
* 分布式锁底层实现原理
* @return
*/
@GetMapping("distributedLock")
public Object distributedLock(){
String lockKey = "distributedLockKey";
//给每个线程都设置一个唯一标识,避免出现程序执行的时间超过设置的过期时间,导致其他线程删除了自己的锁
String clientId = UUID.randomUUID().toString();
try {
//添加过期时间保证线程运行到一半的时候,程序崩了,导致缓存中的key一直存在
Boolean result = redisTemplate.opsForValue().setIfAbsent(lockKey, clientId, 30, TimeUnit.SECONDS);
if (!result) {
return "error_code";
}
// Todo 实现业务逻辑
redisTemplate.opsForValue().set(TestConstant.KEY_TEST,String.valueOf(System.currentTimeMillis()));
} finally {
//判断是不是自己的线程删除自己的锁
if (clientId.equals(redisTemplate.opsForValue().get(lockKey))) {
redisTemplate.delete(lockKey);
}
}
//Todo 当前代码未实现锁续命功能,锁续命功能:由于程序执行时间可能超过设置缓存中锁的过期时间,导致后续一部分业务未执行,一直被其他线程抢占,需要对锁进行续命,但是由于续命的时间不好确定,这个时候就需要单独开启子线程,定时任务不断的去判断当前锁,还在不在,如果不在了,说明业务已经执行完成了,如果还在,重新设置过期时间,一般而言,定时任务的时间为缓存设置的过期时间三分之一就可以了。
return "end";
}
/**
* 分布式锁底层实现原理
* @return
*/
@GetMapping("distributedLock")
public Object distributedLock(){
String lockKey = "distributedLockKey";
//给每个线程都设置一个唯一标识,避免出现程序执行的时间超过设置的过期时间,导致其他线程删除了自己的锁
String clientId = UUID.randomUUID().toString();
try {
//添加过期时间保证线程运行到一半的时候,程序崩了,导致缓存中的key一直存在
Boolean result = redisTemplate.opsForValue().setIfAbsent(lockKey, clientId, 30, TimeUnit.SECONDS);
if (!result) {
return "error_code";
}
// Todo 实现业务逻辑
redisTemplate.opsForValue().set(TestConstant.KEY_TEST,String.valueOf(System.currentTimeMillis()));
} finally {
//判断是不是自己的线程删除自己的锁
if (clientId.equals(redisTemplate.opsForValue().get(lockKey))) {
redisTemplate.delete(lockKey);
}
}
//Todo 当前代码未实现锁续命功能,锁续命功能:由于程序执行时间可能超过设置缓存中锁的过期时间,导致后续一部分业务未执行,一直被其他线程抢占,需要对锁进行续命,但是由于续命的时间不好确定,这个时候就需要单独开启子线程,定时任务不断的去判断当前锁,还在不在,如果不在了,说明业务已经执行完成了,如果还在,重新设置过期时间,一般而言,定时任务的时间为缓存设置的过期时间三分之一就可以了。
return "end";
}
引入依赖:
org.redisson
redisson
3.6.5
启动类中注入bean对象:
@Bean
public Redisson redisson() {
// 此为单机模式
Config config = new Config();
config.useSingleServer().setAddress("redis://localhost:6379").setDatabase(0);
return (Redisson) Redisson.create(config);
}
@Bean
public Redisson redisson() {
// 此为单机模式
Config config = new Config();
config.useSingleServer().setAddress("redis://localhost:6379").setDatabase(0);
return (Redisson) Redisson.create(config);
}
实现分布式:
@Autowired
RedisTemplate redisTemplate;
@Autowired
private Redisson redisson;
/**
* 基于redisson实现高并发分布式锁
* @return
*/
@GetMapping("highConcurrencyDistributedLock")
public Object highConcurrencyDistributedLock(){
RLock redissonLock = redisson.getLock(TestConstant.HIGH_CONCURRENCY_DISTRIBUTED_LOCK);
try {
//加锁,实现了key设置,过期时间,锁续命功能
redissonLock.lock(); //redisTemplate.opsForValue().setIfAbsent(lockKey, clientId, 30, TimeUnit.SECONDS);
// Todo 实现业务逻辑
redisTemplate.opsForValue().set(TestConstant.KEY_TEST,String.valueOf(System.currentTimeMillis()));
} finally {
//释放锁
redissonLock.unlock();
}
return redisTemplate.opsForValue().get(TestConstant.KEY_TEST);
}
@Autowired
RedisTemplate redisTemplate;
@Autowired
private Redisson redisson;
/**
* 基于redisson实现高并发分布式锁
* @return
*/
@GetMapping("highConcurrencyDistributedLock")
public Object highConcurrencyDistributedLock(){
RLock redissonLock = redisson.getLock(TestConstant.HIGH_CONCURRENCY_DISTRIBUTED_LOCK);
try {
//加锁,实现了key设置,过期时间,锁续命功能
redissonLock.lock(); //redisTemplate.opsForValue().setIfAbsent(lockKey, clientId, 30, TimeUnit.SECONDS);
// Todo 实现业务逻辑
redisTemplate.opsForValue().set(TestConstant.KEY_TEST,String.valueOf(System.currentTimeMillis()));
} finally {
//释放锁
redissonLock.unlock();
}
return redisTemplate.opsForValue().get(TestConstant.KEY_TEST);
}
【导读】 惊心动魄!ufo事件盘点,ufo造访地球的真实事件证据,下面是小编为你收集整理的,希望对你有帮助!导语:一提起ufo,人们首先就会很兴奋,多少年来一直没有放弃过对ufo的探索与发现,世界各地也有很多关于ufo事件的目击消息,这些消息中有真有假,不过随着ufo事件报道每年都在增加,十分关注ufo的专......
发布时间:2023-10-22 12:01:08
【导读】 洛阳桥位于哪里,下面是小编为你收集整理的,希望对你有帮助!洛阳桥,曾用名“万安桥”,是中国福建省泉州市境内连接台商投资区和洛江区的一座桥梁。位于洛阳江水道之上,也是著名的跨海梁式大石桥,素有“海内第一桥”之誉,是古代“四大名桥”之一。宋庆历年间(1041年至......
发布时间:2023-10-22 11:01:07
【导读】 即时通讯的意思是什么,下面是小编为你收集整理的,希望对你有帮助!即时通讯是什么意思即时通讯(InstantMessaging)是目前Internet上最为流行的通讯方式,各种各样的即时通讯软件也层出不穷。服务提供商也提供了越来越丰富的通讯服务功能。因特网(Inte......
发布时间:2023-10-22 10:31:06
【导读】 g242高铁途经哪些站点,下面是小编为你收集整理的,希望对你有帮助!1、G242次列车是由厦门北开往青岛的高铁,列车全程:2043公里,运行时间:12小时41分钟。07:45分从厦门北始发,途径23个站,于20:26分到达终点站青岛站。2、途经站:厦门北、晋江、泉州、......
发布时间:2023-10-22 10:01:05
【导读】 隋炀帝的功与过:功为千古一帝(过成祸国之君),下面是小编为你收集整理的,希望对你有帮助!隋炀帝的功与过是很复杂的,可以肯定的是其是一位亡国之君,它使用卑鄙的手段获得了皇位,在上位初期他将所有的军事活动完成了统一,而且解决了扬州问题,在政治上他营建了东都洛阳,使得物资的运转更为方便,还继续......
发布时间:2023-10-22 09:01:05
【导读】 九灵元圣和二郎神谁厉害?二郎神(有人类和仙人的血脉),下面是小编为你收集整理的,希望对你有帮助!大家都知道孙悟空会七十二变,这已经非常厉害了,而二郎神则会七十三变,比孙悟空还厉害,所以二郎神擒住孙悟空是很轻松的,除了二郎神还有九灵元圣也是让孙悟空头疼。那二郎神和九灵元圣都能制服孙悟空,他们俩之间......
发布时间:2023-10-22 08:01:05
【导读】 燃气和天然气的区别是什么,下面是小编为你收集整理的,希望对你有帮助!天然气的压力是2800帕,管道煤气(燃气)的压力是2000帕。管道煤气灶可以改成天然气灶。把灶具的喷嘴和火盖更改一下即可。燃气的出气口很小,天然气的要稍大些,其中喷嘴就是在开关后面的出气喷嘴,在灶底下......
发布时间:2023-10-22 07:01:04
【导读】 oppoa72电池多少毫安,下面是小编为你收集整理的,希望对你有帮助!对于oppoa72电池多少毫安的这个问题,我们下面就来大概了解下。oppoa72电池容量为4040毫安。OPPOA72的正面采用了打孔屏,背部采用了左上角的浴霸三摄,采用侧边指纹解锁它采用6.5英寸的......
发布时间:2023-10-22 06:01:04
【导读】 河童是什么生物,水神的使者/吃人的水虎怪(图片),下面是小编为你收集整理的,希望对你有帮助!在我国和日本的民间有很多关于河童的传说,有人说它们是守护河流的河神,也有人说它们是狡猾嗜血的怪物。没有人具体知道河童是什么生物,也没有人拍摄到河童图片,它还有一个名称叫做水虎。日本会将河童当作神灵膜拜......
发布时间:2023-10-22 05:01:06
【导读】 三星手机重置后如何恢复原来数据,下面是小编为你收集整理的,希望对你有帮助!1、待完成三星手机恢复出厂设置操作后,重启手机,等出现“欢迎”界面后,选择“简体中文”,点击“下一步”按钮。2、接下来需要连接无线WiFi网络,用于实现手机数据的恢复操作。3、在“日期和时间”界面中,......
发布时间:2023-10-22 04:01:04
【导读】 在郑州哪里看夜景最好,下面是小编为你收集整理的,希望对你有帮助!1、郑州CBD的标志建筑物玉米楼,在深沉的夜晚,变换着彩色的光芒,这光芒既不是微光,也不刺眼,在夜空下,形成一道亮丽的风景线。大金蛋的质感和CBD的风采截然一体,它深沉的变换着霓虹灯,给夜晚增添色彩。......
发布时间:2023-10-22 03:37:00
【导读】 主板诊断卡显示a2的意思是什么,下面是小编为你收集整理的,希望对你有帮助!主板诊断卡显示a2是什么意思主板诊断卡显示A2的意思是:高速缓冲存储器测试结束,即将显示任何软错误。解决方法:检查键盘锁。其它相关代码的意思:A0:发出键盘识别命令,即将使键盘识别标志复原。解决方法:......
发布时间:2023-10-22 03:01:04