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

网站建设托管合同购买手表的网站

网站建设托管合同,购买手表的网站,住房和城乡建设部官方网站发布,初三毕业适合女生学的专业前言 Redisson 在基于 NIO 的 Netty 框架上#xff0c;充分的利⽤了 Redis 键值数据库提供的⼀系列优势#xff0c;在Java 实⽤⼯具包中常⽤接⼝的基础上#xff0c;为使⽤者提供了⼀系列具有分布式特性的常⽤⼯具类。使得原本作为协调单机多线程并发程序的⼯具包获得了协调…前言 Redisson 在基于 NIO 的 Netty 框架上充分的利⽤了 Redis 键值数据库提供的⼀系列优势在Java 实⽤⼯具包中常⽤接⼝的基础上为使⽤者提供了⼀系列具有分布式特性的常⽤⼯具类。使得原本作为协调单机多线程并发程序的⼯具包获得了协调分布式多机多线程并发系统的能⼒⼤⼤降低了设计和研发⼤规模分布式系统的难度。同时结合各富特⾊的分布式服务更进⼀步简化了分布式环境中程序相互之间的协作。 1、redisson工作原理 2、看门狗原理 A服务先运行在运行B服务还没释放A的锁A就挂了会不会死锁呢 答没有导致死锁因为底层有看门狗机制 默认指定锁时间为30s看门狗时间 锁的自动续期若是业务超长运行期间自动给锁上新的 30s不用担心业务时间过长锁就自动过期 加锁的业务只要运行完成就不会给当前锁续期及时不手动解锁锁默认在30s 后自动删除。 3、spring boot与redisson的整合 3.1、添加库存服务 stock-service 3.2、添加依赖 dependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependency!-- dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactIdversion2021.0.4.0/version/dependency--dependencygroupIdorg.redisson/groupIdartifactIdredisson/artifactIdversion3.19.1/version/dependency3.3、添加配置 3.3.1、单机 redisson:addr:singleAddr:host: redis://localhost:6379password: 123456database: 0pool-size: 103.3.2、集群 redisson:addr:cluster:hosts: redis://47.96.11.185: 6370,...,redis://47.96.11.185:6373password : 1234563.3.3、主从 redisson:addr:masterAndSlave:masterhost: redis : //47.96.11.185 : 6370slavehosts: redis://47.96.11.185: 6371,redis://47.96.11.185:6372password : 123456database : 03.4、配置RedissonClient 3.4.1、单机 /*** 配置RedissonClient*/ Configuration public class RedissonConfig {Value(${redisson.addr.singleAddr.host})private String host;Value(${redisson.addr.singleAddr.password})private String password;Value(${redisson.addr.singleAddr.database})private int database;Value(${redisson.addr.singleAddr.pool-size})private int poolSize;Beanpublic RedissonClient redissonClient(){Config config new Config();config.useSingleServer().setAddress(host).setPassword(password).setDatabase(database).setConnectionPoolSize(poolSize).setConnectionMinimumIdleSize(poolSize);return Redisson.create(config);} }3.4.2、集群 /*** 配置RedissonClient*/ Configuration public class RedissonConfig {Value(${redisson.addr.cluster.hosts})private String hosts;Value(${redisson.addr.cluster.password})private String password;/*** 集群模式** return*/Beanpublic RedissonClient redissonClient() {Config config new Config();config.useClusterServers().addNodeAddress(hosts.split([,])).setPassword(password).setScanInterval(2000).setMasterConnectionPoolSize(10000).setSlaveConnectionPoolSize(10000);return Redisson.create(config);} }3.4.3、集群 /*** 配置RedissonClient*/ Configuration public class RedissonConfig {Value(${redisson.addr.masterAndSlave.masterhost})private String masterhost;Value(${redisson.addr.masterAndSlave.slavehosts})private String slavehosts;Value(${redisson.addr.masterAndSlave.password})private String password;Value(${redisson.addr.masterAndSlave.database})private int database;/*** 主从模式** return*/Beanpublic RedissonClient redissonClient() {Config config new Config();config.useMasterSlaveServers().setMasterAddress(masterhost).addSlaveAddress(slavehosts.split([,])).setPassword(password).setDatabase(database).setMasterConnectionPoolSize(10000).setSlaveConnectionPoolSize(10000);return Redisson.create(config);} }3.5、Redisson的使用 获取锁 —— 公平锁和⾮公平锁 // 获取公平锁 RLock lock redissonClient . getFairLock ( skuId ); // 获取⾮公平锁 RLock lock redissonClient . getLock ( skuId );加锁 —— 阻塞锁和⾮阻塞锁 // 阻塞锁如果加锁成功之后超时时间为 30s 加锁成功开启看⻔狗剩 5s 延⻓过期时间 lock . lock (); // 阻塞锁如果加锁成功之后设置⾃定义 20s 的超时时间 lock . lock ( 20 , TimeUnit . SECONDS ); // ⾮阻塞锁设置等待时间为 3s 如果加锁成功默认超时间为 30s boolean b lock . tryLock ( 3 , TimeUnit . SECONDS ); // ⾮阻塞锁设置等待时间为 3s 如果加锁成功设置⾃定义超时间为 20s boolean b lock . tryLock ( 3 , 20 , TimeUnit . SECONDS );释放锁 lock . unlock ();应⽤示例 // 公平⾮阻塞锁 RLock lock redissonClient . getFairLock ( skuId ); boolean b lock . tryLock ( 3 , 20 , TimeUnit . SECONDS );减库存加锁案例 import org.redisson.api.RLock; import org.redisson.api.RedissonClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.concurrent.TimeUnit;RestController RequestMapping(/stock) public class StockController {Autowiredprivate RedissonClient redissonClient;GetMapping(/reduceStock)public void reduceStock(RequestParam String productId){// 获取⾮公平锁RLock lock this.redissonClient.getLock(stock: productId);// 阻塞锁如果加锁成功之后设置⾃定义 20s 的超时时间lock.lock(30, TimeUnit.SECONDS);System.out.println(加锁成功. Thread.currentThread().getName());try {TimeUnit.SECONDS.sleep(25);} catch (InterruptedException e) {e.printStackTrace();}finally {System.out.println(解锁成功. Thread.currentThread().getName());lock.unlock();}} }测试浏览器发起两次两次减库存 http://localhost:8099/stock/reduceStock?productId001 3.6、aop实现分布式锁 3.6.1、定义注解 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import java.util.concurrent.TimeUnit;Target(ElementType.METHOD) Retention(RetentionPolicy.RUNTIME) public interface DistributeLock {/*** 参数下标* return*/int[] lockIndex() default {-1} ;/*** 锁的等待时间* return*/long waitTime() default 3000;/*** 时间单位* return*/TimeUnit timeUnit() default TimeUnit.MILLISECONDS; }3.6.2、定义切面 /*** 定义分布式锁的切面*/ Component Aspect public class DistributeLockAspect {Autowiredprivate RedissonClient redissonClient;Around(value annotation(lock))public void distibuteLock(ProceedingJoinPoint proceedingJoinPoint, DistributeLock lock){Signature signature proceedingJoinPoint.getSignature();StringBuilder stringBuilder new StringBuilder();//方法所属的类String declaringTypeName signature.getDeclaringTypeName();String name signature.getName();stringBuilder.append(declaringTypeName);stringBuilder.append(name);//获取调用方法的参数Object[] args proceedingJoinPoint.getArgs();int[] ints lock.lockIndex();if(args ! null) {final int length args.length;if (length 0) {//考虑下标越界for (int anInt : ints) {//把合法下标值放到sbif (anInt 0 anInt length){stringBuilder.append(JSON.toJSONString(args[anInt]));}}}}//将方法的信息转成md5作为锁的标识String key SecureUtil.md5(stringBuilder.toString());//获取锁RLock rLock redissonClient.getLock(key);//从注解获取时间单位TimeUnit timeUnit lock.timeUnit();//从注解等待时间long waitTime lock.waitTime();//执行业务代码try {//加锁rLock.tryLock(waitTime,timeUnit);System.out.println(成功加锁。 Thread.currentThread().getName());proceedingJoinPoint.proceed();} catch (Throwable e) {e.printStackTrace();}finally {//解锁rLock.unlock();System.out.println(成功解锁。 Thread.currentThread().getName());}} }注解的使用 DistributeLock(lockIndex {0,1},waitTime 3,timeUnit TimeUnit.SECONDS)
http://www.dnsts.com.cn/news/194364.html

相关文章:

  • 网站如何兼容大多浏览器苏州网站建设找思创
  • 网站 微信认证一些做设计素材的网站
  • 服装网都有哪些网站网站怎么在百度搜不到
  • 58同城网站建设推广建站网址
  • 学计算机的做网站的叫什么工作河北通信网站建设
  • 云梦做网站的优势手机微信网站开发
  • 织梦如何做淘宝客网站黑帽seo培训大神
  • 外贸网站建站那家公司好无货源电商软件app
  • 网站建设网络安全竞价推广和信息流推广
  • 建站之星模板制作吉林省住房和城乡建设厅网站
  • 国内做的比较好的协会网站做网站用c语言可以吗
  • 长春做网站企业网页制作教程dw
  • 黄州区精神文明建设网站软文营销常用的方式
  • 石家庄住房和城乡建设局网站帝国网站后台管理系统
  • 晋安网站建设兰山网站建设公司
  • 阿里云 建网站攻略建设c2c网站需要多少投资
  • 做带v头像的网站网站做营利性广告需要什么备案
  • 上海备案证查询网站查询网站查询女人与黑狗做视频网站
  • 建设银行官方网站网页版建设部评职称网站
  • 电影点播网站开发费用软件开发八个阶段
  • 冠县做网站推广网站开发第三方支付
  • 怎么给自己的公司建立网站免费的写作网站
  • 怎么做各个地图网站的认证如何给wordpress文章排版
  • 柳州公司网站建设免费做字体的网站
  • 网站建设的制度黄页网址大全免费
  • 企业全屏网站白帽网站
  • 广州网站优化工具做包装看什么网站
  • 江苏靖江苏源建设有限公司招标网站网站推广书
  • 民族文化网站建设的作用网站建设公司不能备案吗
  • 工程建设国家标准网站天津宇昊建设集团有限公司网站