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

温州网站建设华一wordpress微信登陆插件下载失败

温州网站建设华一,wordpress微信登陆插件下载失败,网站建设平台有哪些,绵阳网站建设培训学校上篇讲解了如何用 Redis 实现分布式锁的方案#xff0c;它提供了简单的原语来实现基于Redis的分布式锁。然而#xff0c;Redis作为分布式锁的实现方式也存在一些缺点。本文将引入Redisson来实现分布式锁。 一、Redisson是什么 Redisson是一个基于Redis的分布式Java框架。它提…        上篇讲解了如何用 Redis 实现分布式锁的方案它提供了简单的原语来实现基于Redis的分布式锁。然而Redis作为分布式锁的实现方式也存在一些缺点。本文将引入Redisson来实现分布式锁。 一、Redisson是什么 Redisson是一个基于Redis的分布式Java框架。它提供了丰富的功能和工具帮助开发者在分布式系统中解决数据共享、并发控制和任务调度等问题。通过使用Redisson开发者可以轻松地操作Redis的分布式对象如集合、映射、队列等实现可靠的分布式锁机制以及管理和调度分布式环境中的任务和服务。 Redisson提供的功能 分布式对象 分布式集合Set、SortedSet、List分布式映射Map分布式队列Queue、Deque分布式锁Lock分布式计数器AtomicLong 分布式限流 令牌桶算法Rate Limiter漏桶算法Rate Limiter 分布式发布订阅 发布订阅模式Pub-Sub消息监听器容器Message Listener Container 分布式锁和同步 可重入锁ReentrantLock公平锁FairLock联锁MultiLock红锁RedLock读写锁ReadWriteLock信号量Semaphore闭锁CountDownLatch栅栏CyclicBarrier 分布式服务和任务调度 远程服务Remote Service分布式任务调度器Task Scheduler分布式延迟队列Delayed Queue 分布式地理空间索引Geospatial Index 地理位置存储地理位置搜索 分布式布隆过滤器Bloom Filter和可布隆过滤器Bloom Filter。 分布式缓存 对Redis进行本地缓存Spring缓存注解支持 分布式连接池 支持连接池管理和维护 Redis集群和哨兵支持 支持Redis集群模式支持Redis哨兵模式对于使用Redis集群部署的场景Redisson可以自动识别和操作集群中的多个节点保证数据的高可用性和扩展性。而对于使用Redis哨兵模式部署的场景Redisson可以监控并切换到可用的主从节点实现高可靠性和容错能力。 Spring集成 与Spring框架的无缝集成支持Spring缓存注解 二、Redisson分布式锁 Redisson的分布式锁的特点 线程安全分布式锁可以确保在多线程和多进程环境下的数据一致性和可靠性。 可重入性同一个线程可以多次获取同一个锁避免死锁的问题。锁超时支持设置锁的有效期防止锁被长时间占用而导致系统出现问题。阻塞式获取锁当某个线程尝试获取锁时如果锁已经被其他线程占用则该线程可以选择等待直到锁释放。无阻塞式获取锁当某个线程尝试获取锁时如果锁已经被其他线程占用则该线程不会等待而是立即返回获取锁失败的信息。   Redisson的分布式锁的缺点  单点故障Redisson的分布式锁依赖于Redis集群如果Redis集群出现故障或不可用可能导致分布式锁的可靠性和可用性受到影响。因此在使用Redisson分布式锁时需要特别关注Redis集群的稳定性和高可用性。 锁竞争当多个线程同时请求获取分布式锁时可能出现锁竞争的情况。如果锁竞争较为激烈可能会导致性能下降和请求超时等问题。此外由于Redisson分布式锁是基于Redis进行实现的如果Redis节点的处理能力无法满足高并发的锁请求可能会导致锁请求被延迟或阻塞。 死锁风险分布式环境下由于网络通信、节点故障等因素可能导致锁无法正常释放从而引发死锁问题。需要合理设计和使用锁的超时时间、自动释放机制等来降低死锁风险。 锁粒度管理在分布式环境下锁的粒度管理是一个重要的问题。过于细粒度的锁可能导致并发性能下降而过于粗粒度的锁可能会影响系统的可伸缩性和并发性能。需要根据具体的业务场景和并发访问模式合理选择锁的粒度。 数据一致性使用分布式锁保证多个操作的原子性是很常见的应用场景之一。然而分布式锁通常只能提供粗粒度的互斥访问不能保证数据的完全一致性。在一些特定的应用场景中可能需要额外的措施来确保数据的最终一致性。 Redisson分布式锁源码分析 public interface RLock extends Lock, RLockAsync {String getName();void lockInterruptibly(long var1, TimeUnit var3) throws InterruptedException;boolean tryLock(long var1, long var3, TimeUnit var5) throws InterruptedException;void lock(long var1, TimeUnit var3);boolean forceUnlock();boolean isLocked();boolean isHeldByThread(long var1);boolean isHeldByCurrentThread();int getHoldCount();long remainTimeToLive(); } RLock接口主要继承了Lock接口它是Redisson提供的用于分布式锁的核心接口它定义了获取锁和释放锁等方法 并扩展了很多方法。 如 void lock(long leaseTime, TimeUnit unit) 功能获取锁并设置锁的自动释放时间。参数 leaseTime锁的自动释放时间。unit时间单位。 RFutureVoid lockAsync(long leaseTime, TimeUnit unit) 功能异步方式获取锁并设置锁的自动释放时间。参数 leaseTime锁的自动释放时间。unit时间单位。返回值一个RFuture对象表示异步操作的结果。 boolean tryLock(long waitTime, long leaseTime, TimeUnit unit) throws InterruptedException 功能尝试在指定的等待时间内获取锁并设置锁的自动释放时间。参数 waitTime等待获取锁的最大时间量。leaseTime锁的自动释放时间。unit时间单位。返回值如果在等待时间内成功获取锁则返回true否则返回false。异常如果在等待获取锁的过程中被中断则抛出InterruptedException。 通过上述方法RLock接口提供了更多对lock()方法的拓展使得在获取锁时可以设置自动释放时间或进行异步操作。这样可以更加灵活地控制锁的行为适应不同场景下的需求。 除了上述拓展RLock接口还提供了其他方法来支持可重入锁、公平锁、红锁、读写锁等特性以便满足更为复杂的分布式锁需求。 三、Spring Boot 整合 Redisson 分布式锁  添加Maven依赖 !-- Redisson依赖 -- dependencygroupIdorg.redisson/groupIdartifactIdredisson-spring-boot-starter/artifactIdversion3.16.2/version /dependency!-- Spring Data Redis依赖 -- dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-redis/artifactId /dependency配置Redisson连接application.yml spring:redis:cluster:nodes:- 127.0.0.1:7000- 127.0.0.1:7001- 127.0.0.1:7002password: yourRedisPassword创建Redisson客户端 import org.redisson.Redisson; import org.redisson.api.RedissonClient; import org.redisson.config.Config; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;Configuration public class RedissonConfig {Value(${spring.redis.cluster.nodes})private String clusterNodes;Value(${spring.redis.password})private String password;Beanpublic RedissonClient redissonClient() {Config config new Config();config.useClusterServers().addNodeAddress(clusterNodes.split(,)).setPassword(password);return Redisson.create(config);} }使用分布式锁 在需要使用分布式锁的地方注入RedissonClient实例并使用getLock方法创建一个分布式锁对象RLock。 import org.redisson.api.RLock; import org.redisson.api.RedissonClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;Service public class SomeService {Autowiredprivate RedissonClient redissonClient;public void doSomething() {String lockKey myLock; // 锁的keyRLock lock redissonClient.getLock(lockKey);try {lock.lock(); // 获取锁// 在这里执行需要加锁保护的代码} finally {lock.unlock(); // 释放锁}} }RLock.lock() 使用Rlock.lock() 方法时 如果当前没有其他线程或进程持有该锁那么调用线程将立即获得锁定并继续执行后续的代码。如果其他线程或进程已经持有了该锁那么调用线程将被阻塞直到该锁被释放为止。 此外Rlock.lock() 方法还具有以下特点 可重入性同一个线程可以多次调用 Rlock.lock() 方法而不会造成死锁只需确保每次 lock() 调用都有相应的 unlock() 调用与之匹配。超时机制可以通过 lock() 方法中的参数设置等待锁的超时时间避免因为无法获得锁而一直等待。自动续期当线程持有锁的时间超过设置的锁的过期时间时Redisson 会自动延长锁的有效期避免因为业务执行时间过长而导致锁过期。防止死锁Redisson 通过唯一标识锁的 ID 来区分不同的锁防止发生死锁。 lock() 方法加锁流程 RLock.unlock() RLock.unlock()方法用于释放由Redission分布式锁所保护的资源。它允许持有锁的线程主动释放锁从而允许其他线程获取该锁并访问共享资源。 注意事项 RLock.unlock()方法应该在保护的临界区代码执行完毕后进行调用以确保锁的及时释放。在多线程环境下释放锁的顺序应该与获取锁的顺序相对应以避免死锁或资源争用的问题。如果当前线程没有持有锁调用RLock.unlock()方法不会抛出异常也不会影响其他线程。 如果Redisson客户端刚加锁成功并且未指定leaseTime后台会启动一个定时任务watchdog每隔10s检查keykey如果存在就为它⾃动续命到30s在watchdog定时任务存在的情况下如果不是主动释放锁那么key将会⼀直的被watchdog这个定时任务维持加锁。但是如果客户端宕机了定时任务watchdog也就没了也就没有锁续约机制了那么过完30s之后key会⾃动被删除、key对应的锁也自动被释放了。 unlock()方法解锁流程 四、更多内容 Spring Boot 集成 Redisson分布式锁注解版 从原理到实践分析 Redis 分布式锁的多种实现方案一
http://www.zqtcl.cn/news/941709/

相关文章:

  • 不用淘宝客api如何做网站北京移动官网网站建设
  • 手表哪个网站做的好河北网站备案流程
  • 凡科做的网站推效果网站做seo第一步
  • 建设在线观看视频网站免费企业网站建设免费
  • 网站开发需要后台吗哪家建站公司好
  • 个人建设网站论文网站视频怎么做的
  • 不同类型的购物网站汉川网站建设
  • 网站开发需求文档范文广州公司网站托管
  • 网站制作公司官网首页撸撸撸做最好的导航网站
  • 网站建设毕业设计综述centos 安装wordpress lnmp
  • 济宁专业做网站网站建设中 html
  • 中国排名高的购物网站最新发布的手机2022
  • 备案的网站名与公司名称出国用哪个地图app好
  • 网站建设工作室图片文章资讯类网站
  • 深圳自助建站系统网站题目有哪些
  • 郑州做网站kuihuakeji软文发布的平台与板块
  • 一那个网站可以做一建题安全文化企业示范企业评价标准
  • 网站没有关键词收录phpstudy配置网站
  • 返利网站怎么做的做网站推广见客户的话术
  • 两个人看的视频在线观看成都网站seo厂家
  • 做汽车配件出口用什么网站好些微信朋友圈营销技巧
  • 怎样建设传奇网站空间什么做电子书下载网站
  • 自己怎么做dj 视频网站网站模板制作教程视频
  • 苏州瑞熙网站建设签名图片在线制作
  • 重庆建站模板大全给公司创建网站
  • king cms网站建设上海传媒公司有哪些
  • 优时代网站建设网站建设哪家公司最好
  • 做网站有多难平面设计学徒要学多久
  • 包装网站模板做西式快餐店网站
  • 泉州制作网站软件九歌人工智能诗歌写作网站