很久很久以前,我们的架构都是单体架构,项目也只会部署到一台服务器,基于JVM的 java 同步工具(如ReentrantLcok或synchronized)完全可以保证我们的业务的 原子性;随着微服务,分布式的出现,一个项目会部署到多台服务器(多个JVM),这时候多个服务之间的一系列操作要保证原子性,基于JVM的 java 同步工具(如ReentrantLcok或synchronized)就无能为力了,这时候需要一个针对整个项目(包含所有服务)的一个全局锁来控制业务,这时候分布式锁就应运而生。 源码地址:https://gitee.com/twelfthLunarMonthFourteen/pub_beauty/tree/hotfix/study-note/src/main/java/com/studynote/distribute/lock 个人水平有限,如有问题,请各路大神指教,虚心接纳 如果觉得有帮助,请,谢谢
分布式开发必备技能-分布式锁-redisson实现
背景
分布式锁的 注意事项
并发操作下 导致加过期时间失败问题(某个线程执行完枷锁操作 未加过期时间 报错终止)
开始子线程监控 未执行结束 续命(加过期时间)
防止高并发下 锁失效问题基于 redisson 实现
@RestController public class RedissonLock { // 分布式锁的 注意事项 // 1. 加锁必须设置过期时间 // (避免死锁) // 2. 加锁操作必须和设置 过期时间 是原子性操作 // 并发操作下 导致加过期时间失败问题(某个线程执行完枷锁操作 未加过期时间 报错终止) // 3. 过期时间 必须保证业务操作 结束 // 开始子线程监控 未执行结束 续命(加过期时间) // 4. 必须保证 谁加锁 谁解锁 // 防止高并发下 锁失效问题 static int r = 0; @Autowired private RedissonClient redissonClient; @GetMapping("/testLock") public int testRedissonLock(@RequestParam boolean isLock) throws InterruptedException { RLock rLock = null; int result = 0; if(isLock){ try{// 获取锁 rLock = redissonClient.getLock("test1"); // 上锁 rLock.lock(12, TimeUnit.SECONDS); result = dobusiness(); } finally { // 解锁 rLock.unlock(); } } else { result = dobusiness(); } return result; } private int dobusiness() throws InterruptedException { ++r; TimeUnit.SECONDS.sleep(1); System.out.println(r); return r; }
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算