目录
基于setnx实现的分布式锁存在的问题:
这里我们引入了Redisson,完美解决了这个问题。
Redisson是什么,有什么作用 ?
Redisson 是一个用于 Java 的开源的分布式和高性能 Redis 客户端,它提供了丰富的功能和易于使用的 API,用于与 Redis 数据存储进行交互。
Redisson 的主要用途在于简化和增强与 Redis 的交互方式,使开发人员能够更轻松地利用 Redis 提供的功能。以下是 Redisson 的一些主要特性和用途:
-
分布式对象:Redisson 提供了分布式对象的支持,例如分布式集合、分布式列表、分布式映射、分布式队列等。这使得在分布式环境中使用这些数据结构变得更加简单和高效。
-
分布式锁:Redisson 提供了分布式锁的实现,可以确保在分布式环境下的并发操作的互斥性。它支持公平锁和非公平锁,并提供了多种锁的模式和用法。
-
分布式信号量:Redisson 提供了分布式信号量的实现,用于控制并发访问资源的数量。它可以用于限流、资源池管理等场景。
-
分布式限流器:Redisson 提供了分布式限流器的功能,可以基于令牌桶算法或漏桶算法进行请求限制和速率控制。
-
分布式发布/订阅:Redisson 具有强大的分布式发布/订阅功能,可以在不同的节点之间进行消息的发布和订阅,实现消息的广播和通信。
-
缓存支持:Redisson 提供了对分布式缓存的支持,可以通过简单的 API 轻松地将对象存储在 Redis 中,并进行快速的读取和更新。
-
哨兵模式和集群模式支持:Redisson 支持 Redis 的高可用性模式,包括哨兵模式和集群模式,能够自动检测和管理 Redis 节点的故障转移和主从切换。
总结:Redisson 是一个功能丰富的 Java 客户端,它简化了与 Redis 的交互,提供了分布式数据结构、分布式锁、限流、发布/订阅等功能,使得在分布式系统中更方便地利用 Redis 实现高性能和可靠的应用程序。
怎样使用Redisson?
Redisson 的一些使用场景:
-
分布式缓存:Redisson 提供了简单易用的分布式缓存功能,可以将对象存储在 Redis 中,从而加速读取和减轻后端数据库的负载。
-
分布式锁:在分布式环境中,使用 Redisson 的分布式锁可以确保对共享资源的互斥访问,避免并发冲突和数据不一致的问题。
-
分布式集合和分布式映射:Redisson 提供了分布式集合和分布式映射的功能,可以在分布式环境中方便地操作集合和映射数据结构,如分布式队列、分布式列表、分布式哈希等。
-
分布式限流器:使用 Redisson 的分布式限流器功能,可以限制和控制系统中的请求速率,防止过载和资源耗尽。
-
发布/订阅:Redisson 提供了强大的分布式发布/订阅功能,可以在不同节点之间进行消息的广播和通信。
-
分布式计数器和计时器:Redisson 支持分布式计数器和计时器,可以用于计数、统计和定时任务等场景。
这些只是 Redisson 的一些常见使用场景,实际上它提供了更多功能和工具,可以根据具体需求进行灵活应用。无论是构建分布式应用程序、缓存管理、资源控制还是消息传递,Redisson 都可以为你提供强大的支持
Redisson可重入锁原理:
Redisson分布式锁原理:
Redisson分布式锁主从一致性问题:
正常情况:
主节点发生故障:
这里以为,访问新的主节点,会产生无锁问题,降低了安全性。
解决策略:
多加几个主节点, 相互之间没有任何的关系,都可以进行读写, 必须将所有的主节点的都获取到锁才算是获取成功。因为没有从机,所以不会出现主从一致性问题,具有可用性,就算是真的有一个主机宕机了,其余的也可以工作,可用性也可以根据节点的增高而增高。
如果想让可用性更强,但不想增加从机的数量了,可以在主机中添加从机
这里就算是,有一个主节点宕机了,从机变为了主机,也不会产生安全性问题,就算是有线程拿到了宕机的那个锁,也不会拿到所有的锁,而锁只有全部拿到才生效。所以这里不会产生安全性问题。
总结: