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

河南省城乡与住房建设厅网站郑州做网站设计

河南省城乡与住房建设厅网站,郑州做网站设计,江西sem,网络服务商网站分布式锁#xff0c;就是控制分布式系统中不同进程共同访问同一共享资源的一种锁的实现。 1、引入依赖 dependencygroupIdorg.redisson/groupIdartifactIdredisson-spring-boot-starter/artifactIdversion3.15.5/versio…分布式锁就是控制分布式系统中不同进程共同访问同一共享资源的一种锁的实现。 1、引入依赖 dependencygroupIdorg.redisson/groupIdartifactIdredisson-spring-boot-starter/artifactIdversion3.15.5/version/dependency 2、配置文件 spring:data:redis:database: 1host: localhostport: 6379password: *********3、配置类 package com.example.springboot3test.config;import org.redisson.Redisson; import org.redisson.api.RedissonClient; import org.redisson.config.Config; import org.redisson.config.SingleServerConfig; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;/*** author DeyouKong* description TODO* date 2023/3/23 23:34*/Configuration public class RedissonConfig {Value(value ${spring.data.redis.host})private String host;Value(value ${spring.data.redis.port})private int port;Value(value ${spring.data.redis.database})private int database;Value(value ${spring.data.redis.password})private String password;/*** 单Redis节点模式配置方法* 其他配置參數看:* a href https://github.com/redisson/redisson/wiki/2.-%E9%85%8D%E7%BD%AE%E6%96%B9%E6%B3%95#26-%E5%8D%95redis%E8%8A%82%E7%82%B9%E6%A8%A1%E5%BC%8F* 单Redis节点模式配置方法* /a** return {link RedissonClient}*/Bean(destroyMethod shutdown)RedissonClient redisson() {Config config new Config();//Redis多节点// config.useClusterServers()// .addNodeAddress(redis://127.0.0.1:6379, redis://127.0.0.1:7001);//Redis单节点SingleServerConfig singleServerConfig config.useSingleServer();//可以用rediss://来启用SSL连接String address redis:// host : port;singleServerConfig.setAddress(address);//设置 数据库编号singleServerConfig.setDatabase(database);singleServerConfig.setPassword(password);//连接池大小:默认值64// singleServerConfig.setConnectionPoolSize()return Redisson.create(config);}} 4、测试代码 package com.example.springboot3test.controller;import jakarta.annotation.Resource; import org.redisson.api.RLock; import org.redisson.api.RedissonClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;import java.util.concurrent.TimeUnit;RestController RequestMapping(/redission) public class RedissionController {Resourceprivate RedissonClient redissonClient;private final static String LOCKI_AM_LOCK;GetMapping(/list)public String getString(){// 1、获取一把锁只要锁的名字一样既是同一把锁RLock lock redissonClient.getLock(LOCK);// 2、加锁//lock.lock(5, TimeUnit.SECONDS); // 阻塞式等待if(lock.isLocked()){//如果存在锁则返回失败return fail;}lock.lock();try {System.out.println(Thread.currentThread().getName()\t 获得锁);Thread.sleep(20000);} catch (Exception e) {e.printStackTrace();return 占用所;}finally {// 3、解锁lock.unlock();System.out.println(Thread.currentThread().getName()\t 释放锁锁);}return OK;} } 5、理解 一、时间设置 默认 lock() 小结 lock.lock (); 1默认指定锁时间为30s看门狗时间 2锁的自动续期若是业务超长运行期间自动给锁上新的 30s不用担心业务时间过长锁就自动过期 3加锁的业务只要运行完成就不会给当前锁续期及时不手动解锁锁默认在30s 后自动删除。 指定时间 lock() 小结 问题在锁到期的时候不会自动续期。 1如果我们传递了锁的超时时间就发送给 redis执行脚本进行占锁默认的超时时间既我们指的时间 2若是未指定锁的超时时间就使用 30*1000【LockWatchdogTimeout看门狗的默认时间】 3只要占锁成功就会启动一个定时任务【重新给锁设置过期时间新的过期时间就是看门狗的默认时间】每隔 10 s都会自动再次续到30s, internallockLeaseTime【看门狗时间/3s】 二、其他 1、互斥 在分布式高并发的条件下我们最需要保证同一时刻只能有一个线程获得锁这是最基本的一点。 2、防止死锁 在分布式高并发的条件下比如有个线程获得锁的同时还没有来得及去释放锁就因为系统故障或者其它原因使它无法执行释放锁的命令,导致其它线程都无法获得锁造成死锁。所以分布式非常有必要设置锁的有效时间确保系统出现故障后在一定时间内能够主动去释放锁避免造成死锁的情况。 6、读写锁 读写锁Readers-Writer Lock顾名思义是一把锁分为两部分读锁和写锁其中读锁允许多个线程同时获得因为读操作本身是线程安全的而写锁则是互斥锁不允许多个线程同时获得写锁并且写操作和读操作也是互斥的。总结来说读写锁的特点是读读不互斥、读写互斥、写写互斥。 实现首先要配置redis见前面的博客 spring boot配置redis 读写锁代码 package com.example.springboot3test.controller;import jakarta.annotation.Resource; import org.redisson.api.RLock; import org.redisson.api.RReadWriteLock; import org.redisson.api.RedissonClient; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;import java.util.UUID; import java.util.concurrent.TimeUnit;RestController RequestMapping(/redission) public class RedissionController {Resourceprivate RedissonClient redissonClient;Resourceprivate RedisTemplate redisTemplate;private final static String LOCKI_AM_LOCK;// 并发写锁GetMapping(/write)public String writeValue(){RReadWriteLock myLock redissonClient.getReadWriteLock (my_lock);RLock rLock myLock.writeLock ( );rLock.lock ();String s ;try {System.out.println (写锁加锁成功...Thread.currentThread ().getId () );s UUID.randomUUID ().toString ();Thread.sleep(20000);redisTemplate.opsForValue ().set (writeValue,s);} catch (Exception e) {e.printStackTrace ();}finally {System.out.println (写锁解锁成功...Thread.currentThread ().getId () );rLock.unlock ();}return s;}// 并发读锁GetMapping(read)public String readValue(){RReadWriteLock myLock redissonClient.getReadWriteLock (my_lock);RLock rLock myLock.readLock ( );rLock.lock ();String s ;try {System.out.println (读锁加锁成功...Thread.currentThread ().getId ());Thread.sleep(20000);s (String) redisTemplate.opsForValue ().get (writeValue);} catch (Exception e) {e.printStackTrace ( );}finally {System.out.println (读锁解锁成功...Thread.currentThread ().getId () );rLock.unlock ();}return s;} }
http://www.hkea.cn/news/14516990/

相关文章:

  • 电脑做网站做外贸网站需要多少钱
  • 湖北定制型网站建设精品源码分享免费下载
  • 网站首页上的动画是咋做的英文建站多少钱
  • 太平洋电脑网站外贸做的社交网站
  • cms做网站可以做些什么网站局域网内部如何做网站
  • 正规网站建设平台wordpress添加新的小工具
  • 自己做网站切入地图零基础网站建设教学培训班
  • 做网站的风险分析滨州做网站的
  • 邢台建网站公司网页制作模板简单
  • 社区网站设计策划书3000字安卓优化大师app
  • 消防器材网站建设背景青岛谁做网站多少钱
  • 网站建设行吗业务型网站首页
  • 网站做404不同类型的网站
  • 专题网站建设总要求my21777域名查询
  • 怎么创建图片网站重庆企业展厅设计
  • 外卖网站建设价钱建设工程信息化平台
  • 服装设计素材网站大全公司系统软件
  • 湖南众诚建设 官方网站小米手机网站建设目标
  • 做一元购网站中国做水产的有什么网站
  • 南阳百度网站推广想开个小说网站怎么做
  • 智慧团建网站入口手机版重庆 做网站
  • 南昌市做网站公司asp.net网站开发技术
  • 企业做网站大概多少钱合肥网站开发外包
  • 厦门网站建设缑阳建响应式网站文案
  • 腾讯风铃怎么建设网站原创wordpress模板
  • 自学做网站可以赚钱吗茅台酒网站建设方案
  • 无锡网站建设专家怎么给自己喜欢的人做网站
  • 城市建设管理网站网站设计的一般流程
  • 昆明本地网站建设工程168
  • 网站备案号码东莞企业网站费用