Redisson分布式锁
Redisson 是什么/h2>
Redisson是一个Java库,它为Redis服务器提供分布式和可扩展的Java对象和服务(Set、Multimap、SortedSet、Map、Lock、Semaphore、CountDownLatch、Publish/Subscribe、Bloom filter等)。它允许您将Redis服务器用作Java对象缓存、消息代理或分布式Java对象存储。
Redisson的一个常见用例是将其用作分布式锁管理器。分布式锁管理器是允许分布式进程同步访问共享资源的软件组件。分布式锁管理器可用于确保一次只有一个进程可以访问资源,这对于防止竞争条件和其他类型的同步问题非常有用。
Redisson是一个Java库,它为Redis服务器提供分布式和可扩展的Java对象和服务(Set、Multimap、SortedSet、Map、Lock、Semaphore、CountDownLatch、Publish/Subscribe、Bloom filter等)。它允许您将Redis服务器用作Java对象缓存、消息代理或分布式Java对象存储。
Redisson的一个常见用例是将其用作分布式锁管理器。分布式锁管理器是允许分布式进程同步访问共享资源的软件组件。分布式锁管理器可用于确保一次只有一个进程可以访问资源,这对于防止竞争条件和其他类型的同步问题非常有用。
要将Redisson用作分布式锁管理器,可以使用RLock接口,该接口提供获取、释放和更新锁的方法。例如,以下代码片段显示了如何使用Redisson获取和释放锁:
Redisson还提供其他类型的锁,如ReadWriteLock和PermitExpirableSemaphore,它们可以用于不同类型的同步场景。
Redisson加锁的过程
要使用Redisson获取锁,可以使用RLock接口的lock()方法。此方法将阻塞,直到获取锁,或者直到获取锁超时(如果指定了超时)。
例如,以下代码片段显示了如何获取超时为10秒的锁:
如果您想在不阻塞的情况下获取锁(即,如果锁不可用,您想立即返回),可以使用tryLock()方法,该方法返回一个布尔值,指示是否获取了锁。
您还可以指定锁的租用时间,即释放后锁将保持锁定的时间。如果您希望确保锁在释放后不会立即被另一个进程重新获取,那么这将非常有用。要指定租赁时间,可以使用lock(long leaseTime,TimeUnit单位)或tryLock(long waitTime,long leaseTime,TimeUnit单元)方法。
加锁的过程图:
Redisson锁的优劣
在某些情况下,使用像Redisson这样的分布式锁管理器可能会很有用,因为您需要跨多个进程或线程同步对共享资源的访问。使用Redisson进行分布式锁定的一些潜在好处包括:
1、可扩展性:Redisson设计用于分布式系统,可以通过向集群中添加更多Redis服务器来横向扩展。这使得它适合在高并发环境中使用。
2、容错:即使一个或多个Redis服务器宕机,Redison也可以自动从故障中恢复并保持锁定状态。
3、易用性:Redisson为获取、释放和更新锁提供了一个简单的API,并支持针对不同同步场景的各种类型的锁(例如,读/写锁、信 量)。
然而,在使用Redison进行分布式锁定时,也有一些潜在的缺点需要考虑:
1、性能:获取和释放锁可能是一项相对昂贵的操作,尤其是当需要在多个Redis服务器上更新锁状态时。这会影响应用程序的性能,尤其是在高并发环境中。
2、复杂性:使用像Redisson这样的分布式锁管理器可能会给应用程序带来额外的复杂性,因为您需要仔细管理锁状态并处理故障和超时。
3、单点故障:如果Redisson依赖的Redis服务器宕机,锁管理器将无法运行。这可以通过使用Redis Sentinel或Redis Cluster实现高可用性来缓解,但这仍然是一个需要考虑的潜在风险。
上面是人工智能ChatGpt说的,下面是人说的:
优点:
1、支持可重入
2、不依靠redis本身的实现,即不依靠setNX
缺点:
1、实现复杂
2、存在分布式问题:比如说redis一主一从,应用1拿到锁,value设置为1,然后主挂了value=1还没同步,从提升为主,但是加锁信息没有同步过来value还是为0,应用2发现value为0拿到锁,这就会造成两个应用拿到锁的情况。可以使用RedLock解决(存在争议)。
文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树使用JDBC操作数据库数据库操作91337 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!