redis redisson

1.redis cluster集群环境及安装教程

6-0.Redis Cluster 普通集群部署的(2台服务器3主3从)

2.redisson教程

这里首先通过项目 demo-redisson 中的 Application.java 中的demo分析下面的分布式锁

2-1. redisson 之RLock重入锁、非公平锁

详细介绍 : 8. 分布式锁和同步器

基于Redis的Redisson分布式可重入锁[RLock](http://static.javadoc.io/org.redisson/redisson/3.10.0/org/redisson/api/RLock.html) Java对象实现了java.util.concurrent.locks.Lock接口。同时还提供了异步(Async)反射式(Reactive)RxJava2标准的接口。

  1. RLock lock = redisson.getLock("anyLock");
  2. // 最常见的使用方法
  3. lock.lock();

获取到了分布式锁之后,就可以任由你查询那条数据,修改那条数据,在这个期间,没有任何其他的客户端可以来修改这条数据,获取了一个分布式锁之后,就对某个共享的数据获取了一定时间范围内的独享的操作

注意:负责储存这个分布式锁的Redisson节点宕机以后,而且这个锁正好处于锁住的状态时,这个锁会出现锁死的状态。为了避免这种情况的发生,Redisson内部提供了一个监控锁的看门狗,它的作用是在Redisson实例被关闭前,不断的延长锁的有效期。默认情况下,看门狗的检查锁的超时时间是30秒钟

另外Redisson还通过加锁的方法提供了leaseTime的参数来指定加锁的时间。超过这个时间后锁便自动解开了

  1. // 加锁以后10秒钟自动解锁
  2. // 无需调用unlock方法手动解锁
  3. lock.lock(10, TimeUnit.SECONDS);
  4. // 尝试加锁,最多等待100秒,上锁以后10秒自动解锁
  5. boolean res = lock.tryLock(100, 10, TimeUnit.SECONDS);
  6. lock.unlock();

Redisson同时还为分布式锁提供了异步执行的相关方法:

  1. RLock lock = redisson.getLock("anyLock");
  2. lock.lockAsync();
  3. lock.lockAsync(10, TimeUnit.SECONDS);
  4. Future<Boolean> res = lock.tryLockAsync(100, 10, TimeUnit.SECONDS);

lock.lockAsync() : 异步加锁,用了其他的线程去进行加锁,不会阻塞你当前主线程的执行
Future<Boolean> res : 不断的去查询这个feture对象的一些状态,看看异步加锁是否成功

源码大致分析及流程图

点击查看【processon】

2-2.redisson之公平锁业务分析

Redisson 公平锁(重入锁)源码及Lua脚本分析

2-3.redisson之RedLock业务分析

截取资料

  • redis cluster 集群环境配置

centos7 搭建redis5 集群 — 入门Demo 分布式锁-这一篇全了解(Redis实现分布式锁完美方案) Redis 5.0 redis-cli —cluster help说明 — redis集群redis-cli的指令解析文档

  • Redisson 相关

redisson官网 redission github 中文文档教程 01-使用Redisson实现可重入分布式锁原理 02-使用Redisson实现公平锁原理 03-使用Redisson实现RedLock原理

Redis锁从面试连环炮聊到神仙打架 — why大佬的归纳