当前位置: 首页 > wzjs >正文

怎么建立网站平台广州市网站建设哪里有

怎么建立网站平台,广州市网站建设哪里有,洛可可设计公司招聘,2345网址大全导航(一)基本原理和不同实现方式对比sycn利用内部的锁监视器来控制锁,在jvm内部,只有一个线程能够获得锁监视器,因此可以实现线程互斥;当有多个jvm有多个锁监视器,就无法实现不同jvm下线程互斥的问题…

(一)基本原理和不同实现方式对比

在这里插入图片描述

sycn利用内部的锁监视器来控制锁,在jvm内部,只有一个线程能够获得锁监视器,因此可以实现线程互斥;当有多个jvm有多个锁监视器,就无法实现不同jvm下线程互斥的问题,因为同一时间可以有多个线程获取锁监视器。

在这里插入图片描述
分布式锁:满足分布系统下或集群模式下多进程可见并互斥的锁
在这里插入图片描述
在这里插入图片描述

(二)redis的分布式锁实现思路

在这里插入图片描述
在这里插入图片描述

(三)实现redis分布式锁版本1

在这里插入图片描述

public interface ILock {// 尝试获取锁boolean tryLock(long timeoutSec);// 释放锁void unlock();
}
public class SimpleRedisLock implements ILock{private StringRedisTemplate stringRedisTemplate;private String name;public SimpleRedisLock(StringRedisTemplate stringRedisTemplate, String name) {this.stringRedisTemplate = stringRedisTemplate;this.name = name;}private static  final String KEY_PREFIX = "lock:";@Overridepublic boolean tryLock(long timeoutSec) {// 获取线程标识long threadId = Thread.currentThread().getId();// 获取锁Boolean success = stringRedisTemplate.opsForValue().setIfAbsent(KEY_PREFIX + name, threadId + "", timeoutSec, TimeUnit.SECONDS);// 避免空指针风险return Boolean.TRUE.equals(success);}@Overridepublic void unlock() {// 释放锁stringRedisTemplate.delete(KEY_PREFIX + name);}
}
        // 创建锁对象SimpleRedisLock lock = new SimpleRedisLock(stringRedisTemplate, "order:" + userId);// 获取锁boolean isLock = lock.tryLock(1200);// 判断获取锁是否成功if(!isLock){// 获取锁失败,返回错误信息并且重试return Result.fail("不允许重复下单");}try {// 获取代理对象(事务)IVoucherOrderService proxy = (IVoucherOrderService) AopContext.currentProxy();return proxy.createVoucherOrder(voucherId);}finally {// 释放锁lock.unlock();}

利用集群进行测试
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
同一个用户在两个不同jvm的线程下同时发起请求,只能获取到一把锁。此时分布式锁生效。

在这里插入图片描述

(四)redis分布式锁误删问题

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(五)解决Redis分布式锁误删问题

在这里插入图片描述

public class SimpleRedisLock implements ILock{private StringRedisTemplate stringRedisTemplate;private String name;public SimpleRedisLock(StringRedisTemplate stringRedisTemplate, String name) {this.stringRedisTemplate = stringRedisTemplate;this.name = name;}private static  final String KEY_PREFIX = "lock:";private static  final String ID_PREFIX = UUID.randomUUID().toString(true) + "-";@Overridepublic boolean tryLock(long timeoutSec) {// 获取线程标识String threadId = ID_PREFIX + Thread.currentThread().getId();// 获取锁Boolean success = stringRedisTemplate.opsForValue().setIfAbsent(KEY_PREFIX + name, threadId, timeoutSec, TimeUnit.SECONDS);// 避免空指针风险return Boolean.TRUE.equals(success);}@Overridepublic void unlock() {// 获取线程标识String threadId = ID_PREFIX + Thread.currentThread().getId();// 获取锁中的标识String id = stringRedisTemplate.opsForValue().get(KEY_PREFIX + name);if(threadId.equals(id)){// 判断标识是否一致stringRedisTemplate.delete(KEY_PREFIX + name);}}
}

(六)分布式锁的原子性问题

在这里插入图片描述

(七)Lua脚本解决多条命令原子性问题

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(八)java调用lua脚本改造分布式锁

在这里插入图片描述

"unlock.lua"创建lua文件在resources下

if(redis.call('get', KEYS[1]) == ARGV[1]) thenreturn redis.call('del', KEYS[1])
end
return 0
    private static final DefaultRedisScript<Long> UNLOCK_SCRIPT;static {UNLOCK_SCRIPT = new DefaultRedisScript<>();UNLOCK_SCRIPT.setLocation(new ClassPathResource("unlock.lua"));UNLOCK_SCRIPT.setResultType(Long.class);}@Overridepublic void unlock() {// 调用lua脚本stringRedisTemplate.execute(UNLOCK_SCRIPT,Collections.singletonList(KEY_PREFIX + name),ID_PREFIX + Thread.currentThread().getId());}

在这里插入图片描述

(八)Redisson功能介绍

在这里插入图片描述

在这里插入图片描述

(九)Redisson快速入门

在这里插入图片描述
在这里插入图片描述

 <dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>3.13.6</version></dependency>
@Configuration
public class RedissonConfig {@Bean public RedissonClient redissonClient(){Config config = new Config();config.useSingleServer().setAddress("redis://127.0.0.1:6379").setPassword("你的密码");return Redisson.create(config);}
}

@Resource
private RedissonClient redissonClient;// 创建锁对象
//        SimpleRedisLock lock = new SimpleRedisLock(stringRedisTemplate, "order:" + userId);RLock lock = redissonClient.getLock("lock:order:" + userId);// 获取锁boolean isLock = lock.tryLock();

(八)Redisson的可重入原理

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

(九)Redisson的锁重试和看门狗机制

叽里呱啦的全是源码,这里上两张图吧

在这里插入图片描述
在这里插入图片描述

(十)Redisson的multiLock原理

在这里插入图片描述
在这里插入图片描述
配置三个redis节点,这里看视频就行,理解思路

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述


文章转载自:

http://kc0b3KXL.gnfkL.cn
http://wIduS43j.gnfkL.cn
http://KwX40R1Z.gnfkL.cn
http://nt0UdTfp.gnfkL.cn
http://1li6keMe.gnfkL.cn
http://0X7JlvN1.gnfkL.cn
http://T2S4KGiI.gnfkL.cn
http://MqKRzIPF.gnfkL.cn
http://SkYTbKVu.gnfkL.cn
http://OhWXpd1K.gnfkL.cn
http://5mGbaKWC.gnfkL.cn
http://3NolQCvy.gnfkL.cn
http://ysTFrWCD.gnfkL.cn
http://y5jNCYo3.gnfkL.cn
http://HUMxqS3g.gnfkL.cn
http://iEbsSGFZ.gnfkL.cn
http://5jHqn05f.gnfkL.cn
http://dynZpqKB.gnfkL.cn
http://AWBaYHQr.gnfkL.cn
http://f25zLJYO.gnfkL.cn
http://Lqalrd7W.gnfkL.cn
http://XXvMiCK0.gnfkL.cn
http://fHEXNzoB.gnfkL.cn
http://J1ct3N9I.gnfkL.cn
http://VxO20kXh.gnfkL.cn
http://hgIz91jR.gnfkL.cn
http://3J4EaVnj.gnfkL.cn
http://lUX5h0Id.gnfkL.cn
http://KCGmA42L.gnfkL.cn
http://jOC1WnsC.gnfkL.cn
http://www.dtcms.com/wzjs/653053.html

相关文章:

  • wordpress密码青岛谁优化网站做的好处
  • 电子商务网站的建设方法杭州建设局网站官网
  • 网站可以做章子吗WordPress游览器标签
  • asp个人网站下载深建市住房和城乡建设局网站
  • 做网站用windows和 linux襄阳seo技术
  • 个人网站 建设方案书自己免费做小程序
  • 苏州吴江做网站河南城市建设网站
  • 网站运营部的职责企业展示型网站源码
  • 网站防采集 如何采集网站建设课程设计报告
  • 嘉兴快速建站合作浏览器大全网站
  • 北京好的网站制作做网站的收益来源
  • 咖啡店网站模板抽奖网站怎么做
  • 设计网站需提供什么塑胶加工 技术支持 东莞网站建设
  • 苏州网站建设公司电话佛山网站专家
  • 做外贸 英文网站制作企业网站的app
  • 福州网络营销网站不准别人网站做反链
  • 如何再网站上做免费广告谷歌网站怎么打不开
  • 某公司的网站建设的资金预算书做游戏网站年入百万
  • 烟台开发区建设局网站创业如何进行网站建设
  • 网站建设公司工作枯燥吗花店o2o的特色
  • 深圳网站制作建站wordpress转换为中文版
  • 做酸菜视频网站濮阳新闻直播
  • 个人备案网站可以做产品推广wordpress tomcat
  • 网站通知发送邮件做网站需要什么营业执照
  • 做网站模板 优帮云京东网站的建设目的
  • 济南网站建设销售招聘wordpress文章被采集
  • 网站备案信息填写高端网站模板
  • 三亚网站定制开发公司郑州网站制作_郑州网页制作_做网站设计_河南网站制作网
  • 麻涌企业网站建设潍坊 开发区网站建设
  • 网站建设费用摊销会计分录什么是网络营销常用的网络营销方法有哪些