Redisson - 是一个高级的分布式协调Redis客服端,能帮助用户在分布式环境中轻松实现一些Java的对象,Redisson、Jedis、Lettuce 是三个不同的操作 Redis 的客户端,Jedis、Lettuce 的 API 更侧重对 Reids 数据库的 CRUD(增删改查),而 Redisson API 侧重于分布式开发。
视频介绍:面试官:分布式锁有什么作用?如何实现分布式锁?_哔哩哔哩_bilibili
GitHub地址:https://github.com/redisson/redissonre
Redisson原理流程图 Redisson 分布式锁的缺点Redis分布式锁会有个缺陷,就是在Redis哨兵模式下:客户端1 对某个Master节点写入了Redisson锁,此时会异步复制给对应的 Slave节点。但是这个过程中一旦发生 Master节点宕机,主备切换,slave节点从变为了 Master节点。这时客户端2 来尝试加锁的时候,在新的Master节点上也能加锁,此时就会导致多个客户端对同一个分布式锁完成了加锁。这时系统在业务语义上一定会出现问题,导致各种脏数据的产生。
Redisson分布式锁使用实例 1.引入Redisson依赖 <!--原生--><dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>3.13.4</version></dependency><!--或者另一种Spring集成starter--><dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-boot-starter</artifactId><version>3.13.6</version></dependency> 2.配置Redisson @Configurationpublic class RedissionConfig {@Value("${spring.redis.host}")private String redisHost;@Value("${spring.redis.password}")private String password;private int port = 6379;@Beanpublic RedissonClient getRedisson() {Config config = new Config();config.useSingleServer().setAddress("redis://" + redisHost + ":" + port).setPassword(password);config.setCodec(new JsonJacksonCodec());return Redisson.create(config);}} 3.使用Redisson分布式锁 @Resourceprivate RedissonClient redissonClient;RLock rLock = redissonClient.getLock(lockName);try {boolean isLocked = rLock.tryLock(expireTime, TimeUnit.MILLISECONDS);if (isLocked) {// TODO}} catch (Exception e) {rLock.unlock();}