合肥房产网365,钦州seo,可视化网站建设软件有哪些,小程序定制开发中心【Redis】Redisson分布式锁原理与使用
什么是Redisson#xff1f;
Redisson - 是一个高级的分布式协调Redis客服端#xff0c;能帮助用户在分布式环境中轻松实现一些Java的对象#xff0c;Redisson、Jedis、Lettuce 是三个不同的操作 Redis 的客户端#xff0c;Jedis、Le…【Redis】Redisson分布式锁原理与使用
什么是Redisson
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依赖
!--原生--
dependencygroupIdorg.redisson/groupIdartifactIdredisson/artifactIdversion3.13.4/version
/dependency!--或者另一种Spring集成starter--
dependencygroupIdorg.redisson/groupIdartifactIdredisson-spring-boot-starter/artifactIdversion3.13.6/version
/dependency2.配置Redisson
Configuration
public 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分布式锁
Resource
private RedissonClient redissonClient;RLock rLock redissonClient.getLock(lockName);
try {boolean isLocked rLock.tryLock(expireTime, TimeUnit.MILLISECONDS);if (isLocked) {// TODO}
} catch (Exception e) {rLock.unlock();
}