# redisson-spring-boot-component **Repository Path**: MiMose/redisson-spring-boot-component ## Basic Information - **Project Name**: redisson-spring-boot-component - **Description**: ✔ 封装了Redisson,实现的一套Redis分布式锁、分布式缓存、SpringCache、消息队列等功能的组件 - **Primary Language**: Java - **License**: GPL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 6 - **Forks**: 6 - **Created**: 2020-08-28 - **Last Updated**: 2023-09-20 ## Categories & Tags **Categories**: spring-boot-ext **Tags**: None ## README ### **REDISSON-SPRING-BOOT-COMPONENT** #### redisson组件 #### 一、分布式锁功能 1、在项目pom中引入该组件 ~~~ 1.0.0 com.mimose.component redisson-spring-boot-component ${component.redisson.version} ~~~ 2、在项目配置文件中增加属性 ~~~ ## 单机模式 redisson.base.address=redis://127.0.0.1:6379 redisson.base.password=123456 ## 哨兵模式 redisson.base.master-name=mymaster redisson.base.password=xxxx redisson.base.sentinel-addresses=redis://127.0.0.1:26379,redis://127.0.0.1:26380,redis://127.0.0.1:26381 ~~~ 3、在需要增加锁的逻辑处,调用LockUtil进行加锁(支持超时锁),并通过unlock进行解锁 ~~~ // LockKeyEnum是一个锁标识的枚举类,根据该key进行分布式锁的控制 Lock lock = LockUtil.lock(LockKeyEnum.xxx.getName()); try{ // dosomething }catch(final Exception e){ // excpetion }finally{ lock.unlock(); } ~~~ 4、项目启动脚本增加-Dredisson.open=true ~~~ java -jar -Dredisson.open=true -Dspring.profiles.active=dtest -Dserver.port=8080 target/xxx.jar ~~~ ##### 若想兼容普通的ReentrantLock机制,需要进行以下几步工作: 1、在项目中使用枚举类,设置锁的key,实现redisson组件提供的DefaultLockKey接口,实现getName返回key值 ~~~ public enum LockKeyEnum implements DefaultLockKey { /**预约锁**/ REG_LOCK, /**取消锁**/ CANCEL_LOCK; @Override public String getName() { return this.name(); } } ~~~ 2、加锁时使用该枚举类进行key值的设置 ~~~ Lock lock = LockUtil.lock(LockKeyEnum.REG_LOCK.getName()); xxxxx ~~~ 3、使组件初始化该枚举类的方法(一定要进行): 3.1、在项目的配置文件中增加配置项(单体应用的情况) ~~~ ## redisson lock key package url redisson.lock.enumPackUrl=com.xx.xx..emuns ~~~ 3.2、当项目不是一个单体应用时,为了不需要在各个项目中修改配置文件,可以在统一的引用code项目中的resource新增默认锁配置文件 redisson-default-lock.yml: ~~~ redisson.lock.enumPackUrl: com.xx.xx.emuns ~~~ 如xx-server分为xx-web、xx-api,引用公共的xx.jar,在xx.jar的resource中加入该配置文件,web及api项目则不需要修改配置文件。 3.3、若不想增加配置,可以枚举类的名称规则来规定,规则为:类名中包含 LockKey 。 如这里使用的枚举类是LockKeyEnum,名称中包含了 LockKey ,便会被初始化。 #### 二、分布式缓存机制 1、在项目pom中引入该组件 ~~~ 1.0.0 com.mimose.component redisson-spring-boot-component ${component.redisson.version} ~~~ 2、增加缓存配置文件 redisson-cache.yml: ~~~ # cache key testCache1: # 过期时间 ms ttl: 300000 # 最大空闲时间 ms maxIdleTime: 300000 testCache2: ttl: 300000 maxIdleTime: 300000 ~~~ 默认使用resource下的redisson-cache.yml文件,若有不同,需要在项目配置文件中指定,如: ~~~ redisson.cache.config=classpath:mycache.yml ~~~ 3、在需要使用cache的地方,使用spring提供的注解即可实现 ~~~ @Cacheable @CacheEvict ... ~~~ 4、项目启动脚本增加-Dredisson.open=true ~~~ java -jar -Dredisson.open=true -Dspring.profiles.active=dtest -Dserver.port=8080 target/xx.jar ~~~ ##### TIP: 当引入了redisson-spring-boot-component,却不启动redisson时,即没有设置redisson.open或者设置了redisson.open=false时 1、分布式锁将不可使用,将根据实现的DefaultLockKey接口实例化ReentrantLock锁,进行普通java全局锁; 2、RedissonCache将不可使用,需要自己实现缓存,如集成ehcache #### **配置项:** | 配置名 | 含义 | 默认值 | 备注 | | ------ | ------ | ------ | ------ | | address | redis连接地址 | | 单机模式下生效 | | password | redis连接密码 | | 单机模式及哨兵模式下生效,无密码则不设置 | | database | 数据库编号 | 0 | | | timeout | 命令等待超时,单位:毫秒 | 5000 | 单机模式及哨兵模式下生效 | | connectionTimeout | 连接超时时间,单位:毫秒 | 5000 | 单机模式及哨兵模式下生效 | | connectionPoolSize | 连接池大小 | 250 | 单机模式下生效 | | connectionMinimumIdleSize | 最小空闲连接数 | 20 | 单机模式下生效 | | masterName | 主节点名 | | 哨兵模式下生效 | | sentinelAddresses | 哨兵地址 | | 哨兵模式下生效,多个地址使用逗号隔开 | | masterConnectionPoolSize | 主节点连接池大小 | 400 | 哨兵模式下生效 | | slaveConnectionPoolSize | 从节点连接池大小 | 400 | 哨兵模式下生效 |