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

深圳官网网站建设Gzip 网站 能够压缩图片吗

深圳官网网站建设,Gzip 网站 能够压缩图片吗,app界面设计案例分析,手车做网课网站Redis分布式锁 什么是分布式锁#xff1f; ​ redis分布式锁是一种基于redis实现的锁机制#xff0c;它用于在多并发分布式环境下控制并发访问共享资源。在多个应用程序或是进程访问共享资源时#xff0c;分布式锁可以确保只有一个进程可以访问该资源#xff0c;不会发生…Redis分布式锁 什么是分布式锁 ​ redis分布式锁是一种基于redis实现的锁机制它用于在多并发分布式环境下控制并发访问共享资源。在多个应用程序或是进程访问共享资源时分布式锁可以确保只有一个进程可以访问该资源不会发生数据的不一致和竞争条件的发生。 为什么需要分布式锁 ​ 在多线程环境下如果多个线程同时访问共享资源如外卖订单商品库存这时就会发生数据竞争导致脏数据或者商品超卖的问题。 举个例子假设现在有 100 个用户参与某个限时秒杀活动每位用户限购 1 件商品且商品的数量只有 3 个。如果不对共享资源进行互斥访问就可能出现以下情况 线程 1、2、3 等多个线程同时进入抢购方法每一个线程对应一个用户。线程 1 查询用户已经抢购的数量发现当前用户尚未抢购且商品库存还有 1 个因此认为可以继续执行抢购流程。线程 2 也执行查询用户已经抢购的数量发现当前用户尚未抢购且商品库存还有 1 个因此认为可以继续执行抢购流程。线程 1 继续执行将库存数量减少 1 个然后返回成功。线程 2 继续执行将库存数量减少 1 个然后返回成功。此时就发生了超卖问题导致商品被多卖了一份。 为了保证共享资源被安全地访问我们需要使用互斥操作对共享资源进行保护即同一时刻只允许一个线程访问共享资源其他线程需要等待当前线程释放后才能访问。这样可以避免数据竞争和脏数据问题保证程序的正确性和稳定性。 如何才能实现共享资源的互斥访问呢 锁是一个比较通用的解决方案更准确点来说是悲观锁。 悲观锁总是假设最坏的情况认为共享资源每次被访问的时候就会出现问题(比如共享数据被修改)所以每次在获取资源操作的时候都会上锁这样其他线程想拿到这个资源就会阻塞直到锁被上一个持有者释放。也就是说共享资源每次只给一个线程使用其它线程阻塞用完后再把资源转让给其它线程。 对于单机多线程来说在 Java 中我们通常使用 ReetrantLock 类、synchronized 关键字这类 JDK 自带的 本地锁 来控制一个 JVM 进程内的多个线程对本地共享资源的访问。 从图中可以看出这些线程访问共享资源是互斥的同一时刻只有一个线程可以获取到本地锁访问共享资源。 分布式系统下不同的服务/客户端通常运行在独立的 JVM 进程上。如果多个 JVM 进程共享同一份资源的话使用本地锁就没办法实现资源的互斥访问了。于是分布式锁 就诞生了。 下图是在分布式系统中添加本地锁的情况。 ​ 这时因为sychornized锁是基于JVM实现的但是每台服务器都有自己的JVM所以此时sychornized无法对多个线程进行控制。 下图是采用了分布式锁。 ​ 我在看这部分时看到有人在弹幕中提到分布式锁就是让多个jvm虚拟机去争抢同一把锁。我觉得这样想的话分布式锁就很好理解了。 分布式锁应该具备哪些条件 一个最基本的分布式锁需要满足 互斥任意一个时刻锁只能被一个线程持有。高可用锁服务是高可用的当一个锁服务出现问题能够自动切换到另外一个锁服务。并且即使客户端的释放锁的代码逻辑出现问题锁最终一定还是会被释放不会影响其他线程对共享资源的访问。这一般是通过超时机制实现的。可重入一个节点获取了锁之后还可以再次获取锁。 除了上面这三个基本条件之外一个好的分布式锁还需要满足下面这些条件 高性能获取和释放锁的操作应该快速完成并且不应该对整个系统的性能造成过大影响。非阻塞如果获取不到锁不能无限期等待避免对系统正常运行造成影响。 分布式锁的实现 redis实现分布式锁主要是利用了Redis的setnx命令。setnx是SET IF NOT EXISTS(如果不存在就创建)。 获取锁 #添加锁 NX是互斥 EX是设置超时时间 SET lock value NX EX 10释放锁 DEL lockRedis实现分布式锁如何控制有效时长 1根据业务执行时间进行预估一般不采用不准确。 2给锁设置过期时间并在业务超出过期时间后进行续期。 如何进行续期 Redisson是一个开源的java语言Redis客户端提供了许多开箱即用的功能。 Redisson中提供了一个watch dog 看门狗机制如果操作共享数据的线程在过期时间内并未完成业务Watch Dog就会不断的延长锁的获取时间。进而保证锁不会因为超时而被释放。 ​ 在一般的锁操作中我们一般设置当一个锁被一个线程获取后若有另一个线程想要获取锁就会中断这个线程让他无法获取这个锁。但是在redisson中提供了一个等待机制也就是上图中的while循环在锁被获取后另一个线程不断循环尝试获取锁这样就使得如果线程1在很短的时间内就完成了业务线程2在此时循环获取到锁就能立刻执行业务减少了等待时间提高了执行业务的效率。 Redisson实现分布式锁是可重入的吗 ​ Redisson实现分布式锁是可重入的所谓可重入锁指的是在一个线程中可以多次获取同一把锁比如一个线程在执行一个带锁的方法该方法中又调用了另一个需要相同锁的方法则该线程可以直接执行调用的方法即可重入 而无需重新获得锁。像 Java 中的 synchronizedReentrantLock。 ​ redisson分布式锁可重入的原理就是其内部维护了一个hash结构。 public void add1(){ RLock lock redissonClient.getLock(“heimalock); boolean isLock lock.tryLock(); //执行业务 add2(); //释放锁 lock.unlock(); } public void add2(){ RLock lock redissonClient.getLock(“heimalock); boolean isLock lock.tryLock(); //执行业务 //释放锁 lock.unlock(); } 总结 Redis分布式锁时如何实现的 在Redis中可以使用SET命令结合NXSET IF NOT EXISTS选项来实现分布式锁。以下是基本的实现步骤 获取锁当一个进程需要获取锁时它会向Redis发送一个SET命令设置一个特定的键作为锁的标识并设置过期时间。关键参数如下 锁的键名通常是一个唯一的标识符用于标识该锁。锁的值可以是一个随机生成的唯一值用于区分不同的进程。过期时间确保即使锁没有显式释放也会在一定时间后自动过期避免死锁的发生。 例如使用以下命令获取锁 #添加锁 NX是互斥 EX是设置超时时间 SET lock value NX EX 10如果该键不存在即锁尚未被其他进程占用则成功获取锁并返回OK如果该键已存在表示锁已被其他进程占用获取锁失败返回nil。 释放锁当进程完成对共享资源的操作后需要释放锁以允许其他进程获取锁。释放锁的过程包括以下两个步骤 删除锁进程通过执行DEL命令来删除锁的键释放锁资源 DEL lock如何用Redis实现锁的有效时长 使用了Redis中的Redisson框架redisson需要手动加锁可以设置锁的失效时间和等待时间当一个业务超出了锁的过期时间时在redisson中引入了一个Watch Dog看门狗机制它会每隔一段时间就会检查该业务是否还持有锁若是仍然持有锁那就增加持有锁的时间当业务完成后释放锁。 在一般的锁操作中我们一般设置当一个锁被一个线程获取后若有另一个线程想要获取锁就会中断这个线程让他无法获取这个锁。但是在redisson中提供了一个等待机在锁被获取后另一个线程不断循环尝试获取锁这样就使得如果线程1在很短的时间内就完成了业务线程2在此时循环获取到锁就能立刻执行业务减少了等待时间提高了执行业务的效率。 Redisson实现的可重入锁是否为可重入锁 是可重入的redisson分布式锁可重入的原理就是其内部维护了一个hash结构。判断是否为当前线程持有的锁如果是就对当前线程持有的锁进行计数如果释放锁就对hash结构中的value减一。 本文章中图片多是黑马ppt中的图片在此借用。Redis篇-10-redis分布式锁-实现原理setnx、redisson_哔哩哔哩_bilibili
http://www.hkea.cn/news/14263551/

相关文章:

  • 旅游的网站怎么做统一管理网站系统
  • 做商城网站哪里好图片设计制作软件
  • 杏坛网站设计鄂州网站推广优化技巧
  • 网站建设流程和费用义乌网站建设yw126
  • 图库网站源码下载wordpress 文章 碎片
  • 佛山网站建设制作成都网站建设哪家便宜
  • 那个网站有帮人做图的免费网站建
  • 手机网站首页模板衡水移动网站建设费用
  • dede网站后台建设网站用户名是什么意思
  • 松江公司做网站做网站如何突出网站特色
  • 网站建设优化哪家好房地产做网站怎样吸引客户
  • 网站建设方免费网站推荐货源
  • 长春火车站地址wordpress 不显示边栏
  • 中国建设银行的网站设计东营企业网站排名
  • 阜阳网站制作公司去哪找企业网站建设费用明细
  • 做网站咋做权威的网站建设
  • 惠州网站推广排名广州手机网站定制咨询
  • 河南建设厅网站地址永城做网站
  • 网站营销方案设计公司经典网站案例
  • 网站怎么做qq登录界面华亭网站建设
  • 南昌建站系统外包自动生成网站地图怎么做
  • 苏州专业做网站的公司移动互联网终端设备的主要技术指标是什么
  • 免费学服装设计的网站企业信用网官网
  • 江岸网站建设中国企业500强2023
  • 百度怎么把自己网站展现在百度wordpress导入docx
  • 电子商务网站建设体会与收获wordpress使用七牛
  • 公司里面有人员增减要去哪个网站做登记wordpress 全html支持
  • wordpress xss泉州百度关键词优化
  • 广州市律师网站建设价格wordpress的模板文件
  • 网站建设参考文献龙岩网站建设方式