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

彩票网站建设制作网站建设类型有哪些方面

彩票网站建设制作,网站建设类型有哪些方面,用路由侠做网站,宁波模板建站定制一、什么是分布式锁#xff1f; 在传统的java进程中#xff0c;我们常常用Synchronized三、详解Synchronized-CSDN博客或者ReentrantLock五、详解ReentrantLock-CSDN博客来对临界区进行加锁,防止多个线程之间并行访问,导致数据读写异常。但是这种锁的粒度仅限于当前jvm中 在传统的java进程中我们常常用Synchronized三、详解Synchronized-CSDN博客或者ReentrantLock五、详解ReentrantLock-CSDN博客来对临界区进行加锁,防止多个线程之间并行访问,导致数据读写异常。但是这种锁的粒度仅限于当前jvm中在工业生产环境下往往一个web项目会部署多台机器也就意味着会有多个jvm。那么这几个jvm是独立的这就导致上述的锁失效。 分布式锁是一种在分布式系统环境下通过多个节点对共享资源进行访问控制的机制。在分布式系统中为了防止多个节点同时操作同一份数据从而导致数据的不一致需要使用分布式锁来确保在同一时刻只有一个节点能够操作数据。  二、常见的分布式锁实现方式 分布式锁的实现方式有很多种常见的有基于数据库的分布式锁、基于缓存如Redis的分布式锁、基于ZooKeeper的分布式锁等。 而在互联网工业生产环境中由于对性能的要求基本上都在使用Redis来进行分布式锁。 三、Redis分布式锁的实现 3.1 setnx和expire命令 在redis的命令 一、Redis常用命令-CSDN博客 中我们学到过setnx命令。setnx命令常用于实现分布式锁。具体来说多个客户端可以尝试使用setnx命令来创建相同的锁key只有一个客户端的操作会成功成功的客户端将获得锁失败的客户端将不会获得锁。这样可以确保同时只有一个客户端能够操作被锁住的资源避免并发操作导致的数据不一致。 但是setnx的命令没有设置超时时间因此当前的key会一直存放在redis中除非有线程主动的del key。因此在添加setnx key 的时候需要在后面设置expire key 过期时间。 如果 setnx key  和 expire key 中间服务挂了那么当前key将一直存在Redis导致其他线程无法加锁。 因此可以使用set命令因为set命令后面有很多参数 set key value ex 10 nx。这样设置值和设置过期时间将是一个原子的操作。 3.2 setnx分布式锁的缺点 1、setnx需要手动释放即使设置了过期时间这个时间也没有一个标准。如果时间过短其他线程就可以获取锁如果时间太长其他线程就得等。 2、不支持重入。相同的线程重复进行加锁的时候会被阻塞住。 3、锁误删。这个和redis过期时间有关例如a线程加了锁然后执行逻辑由于redis的过期时间很短a还没执行完锁就过期了。此时b线程加锁成功开始处理逻辑。那么这个时候a线程执行结束执行finally的锁释放。这就导致a线程释放了b线程加的锁。 下面给出一个简单的demo class LockTest{private RedisClient redisClient;private static final UUID UUID.uuid();//加锁public boolean tryLock(String lockName, long expireTime){String value UUID System.currentThread(); //防止锁误删return redisClient.set(lockName, value, expireTime); //设置redis的key和value以及过期时间 }//解锁public void unLock(String lockName){String targetValue UUID System.currentThread(); Strign value redisClient.get(lockName);if(targetValue.equals(value)){redisClient.delete(locaName);}}} 四、Redisson分布式锁 4.1 lua脚本 在上述demo中尤其是在unlock的方法中redisClient.get() 和redisClient.delete()方法是隔开的。如果get方法之后线程被挂起那么delete()方法还是可能被误删。 根本原因就是读写操作不是原子的。如果get和delete处于原子操作中那么就不会出现误删的现象。 在redis中支持lua脚本语言而lua脚本在redis执行过程是一个原子的也就意味着要么整个lua脚本全执行要么全不执行。 具体的lua脚本的语法这里不做多说明大家可以自行查询。  这里将上面的delete方法进行修改 public void unLock(String lockName){String targetValue UUID System.currentThread(); redisClient.eval(local id redis.call(get, KEYS[1]) local targetId ARGV[1]if(id targetId) then return redis.call(del, KEYS[1])end return 0, Lists.newArrayList(lockName), Lists.newArrayList(targetValue)); } 4.2 源码解析 4.2.1 redisson的demo 先配置redisson的依赖 dependencygroupIdorg.redisson/groupIdartifactIdredisson/artifactIdversion3.x.x/version /dependency创建config对象配置要连接的redis Config config new Config(); config.useSingleServer().setAddress(redis://localhost:6379); RedissonClient redisson Redisson.create(config);
http://www.pierceye.com/news/196455/

相关文章:

  • 制作微信公众号的网站开发30岁做网站运营
  • 松江手机网站开发正规免费代理
  • 太原市建设路小学网站昆山住房与城乡建设局网站
  • 石家庄的网站的公司计算机应用技术专业网站开发方向
  • 网站优化软件排行榜八年级微机网站怎么做
  • 织梦网站漏洞cms网站开发流程
  • 网站开发规划书怎么写企业cms开源
  • html网站免费下载海珠区建网站
  • 石家庄住房城乡建设厅网站宿迁网站建设推广公司
  • 广州模板网站建设费用2024新闻热点摘抄
  • 河北秦皇岛建设局网站做网站简单的软件
  • 上海网站开发外包公司最新新闻热点事件短篇
  • wordpress实现网站勋章功能网站建设需要什么资质
  • 河北沙河市建设局网站威海好的网站建设公司
  • 网站建设怎么放到云空间上海企业网站模板
  • 设计和建设企业网站心得和体会wordpress和新浪微博同步
  • 网站底部横条导航代码制造业erp系统软件有哪些
  • 网站建设公司antnw企业营销型网站制作
  • 接口网站开发wordpress安装网站无法
  • 九九9九九9视频在线观看优化网站结构一般包括
  • 网站缺点国外网站素材
  • 网站域名到期如何续费淘宝客绑定网站备案号
  • 什么是自建站常州 网站制作
  • 网站开发基础培训网站做推广有用吗
  • 音乐网站开发模板网页设计师用什么软件
  • 烟台优化网站重庆酉阳网站设计公司
  • 网站维护工作太原公司网站建设
  • 个性化网站建设报价案例查询网站
  • 淘宝网站框架项目管理软件下载
  • 网站建设课程内容如何优化关键词