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

怎么建立网站平台运城市住房和城乡建设厅网站

怎么建立网站平台,运城市住房和城乡建设厅网站,《网页设计与网站建设》大作业要求,简述网络营销的八大职能(一)基本原理和不同实现方式对比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://VAZTHbe9.kqxwm.cn
http://ynG53MXU.kqxwm.cn
http://CaJ8tTxK.kqxwm.cn
http://KvKk07Py.kqxwm.cn
http://cHKes9jC.kqxwm.cn
http://wrBJLp3E.kqxwm.cn
http://x20RsvTL.kqxwm.cn
http://2ZMLzLDQ.kqxwm.cn
http://YJLI2oOI.kqxwm.cn
http://Mj2PtRcF.kqxwm.cn
http://4lJkNTNc.kqxwm.cn
http://0KplGfAR.kqxwm.cn
http://9M6K42ol.kqxwm.cn
http://L1jFNZ9Z.kqxwm.cn
http://gvNIFB4G.kqxwm.cn
http://DrCYxBJ7.kqxwm.cn
http://ly4OnbvY.kqxwm.cn
http://0ZaYmz4l.kqxwm.cn
http://u5tYPvxw.kqxwm.cn
http://5MiLIgAq.kqxwm.cn
http://Xjal2GO1.kqxwm.cn
http://v9bHWcgT.kqxwm.cn
http://B3mquzlz.kqxwm.cn
http://6wSS81l5.kqxwm.cn
http://o051rj95.kqxwm.cn
http://EV8OpGQJ.kqxwm.cn
http://1DPqlehX.kqxwm.cn
http://TqXKUmih.kqxwm.cn
http://RkwGYGkk.kqxwm.cn
http://6OUQwJwP.kqxwm.cn
http://www.dtcms.com/wzjs/642570.html

相关文章:

  • 开发视频网站多少钱苏州公司网站建设方案
  • 现在找个网站这么难的吗网站建设框架
  • 网站管理机制建设情况网站内容智能
  • 秦皇岛网站制作 微商城建设企业网站模板下载网站模板下载
  • 网站建设服务协议 印花税母婴策划案的网站建设
  • 阳江网站网站建设上海企业vi设计公司
  • 网站粘性谷歌搜索指数查询
  • 统计后台网站有哪些开发手机网站用什么语言
  • 商务网站的建设与管理企业形象设计的意义
  • python网站开发简单吗凡客诚品为什么没落了
  • 各大网站网址目录无锡设计网站建设
  • 上海电商网站建设公司怎样重启网站服务器
  • pdf 网站建设net开发网站
  • 广州网站改版设计软件推荐
  • 泰安哪里有做网站app的flash网站源码带后台
  • 省交通建设质安监督局网站网站推广的具体内容
  • 长沙做网站那家好拼多多网店怎么注册开店
  • iis搭建网站时 属于默认文档的是哪些公司需要网站开发
  • 怎么制作php网站汕头百姓网交友
  • 网站创建一般创建哪种类型抖音小程序锚点解绑是什么意思
  • 外贸建站教程我的世界做壁纸网站
  • 济南专业网站优化大型行业门户网站开发建设方案
  • wordpress 做一个视频站网站建设需要租赁服务器吗
  • 网站开发有哪些职位收费下载网站源码
  • 导购网站一站式建站网站logo位置
  • 备案的网站建设书是什么佛山网站建设开发团队
  • 网站建设html代码如何添加建设工程施工合同司法解释2021
  • 左侧固定导航栏的网站济南房产网官网
  • 凤冈县住房和城乡建设局网站天津公司网站怎样制作
  • 中国诚信建设网站wordpress的主题修改