Redisson Spring Boot 脚手架 redisson-spring-boot-starter

LGPL
Java
跨平台
2019-03-27
zengtengpe
redisson-spring-boot-starter 正在参加 2019 年度最受欢迎开源中国软件评选,请投票支持!
redisson-spring-boot-starter 在 2019 年度最受欢迎开源中国软件评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
投票赢奖品
已投票

redisson-spring-boot-starter

目前有很多项目还在使用jedis的 setNx 充当分布式锁,然而这个锁是有问题的,redisson是java支持redis的redlock的唯一实现, 官方目前只有java web版本,配置起来很麻烦.集成该项目后只需要极少的配置.就能够使用redisson的全部功能. 目前支持集群模式,云托管模式,单Redis节点模式,哨兵模式,主从模式 配置. 支持 可重入锁,公平锁,联锁,红锁,读写锁 锁定模式

介绍

  1. 我们为什么需要redisson?

redisson目前是官方唯一推荐的java版的分布式锁,他支持 redlock.具体请查看 官方文档

  1. jedis为什么有问题?

目前jedis是只支持单机的.

jedis setNx 和设置过期时间是不同步的,在某些极端的情况下会发生死锁.导致程序崩溃.如果没有设置value, 线程1可能会释放线程2的锁 详情看下这篇 博客

软件架构

  1. redisson
  2. spring boot

安装教程

  1. 引入 pom.xml
<dependency>
    <groupId>com.zengtengpeng</groupId>
    <artifactId>redisson-spring-boot-starter</artifactId>
    <version>1.0.0</version>
</dependency>

使用说明

  1. 在 application.properties 增加
#单Redis节点模式
redisson.singleServerConfig.address=127.0.0.1:6379

2.在方法增加 @Lock 注解

//支持 spel 表达式 如果后面需要接字符串的话请用`+`连接. 字符串一定要打`单引号`
@Lock(keys = "#user.name+'locks'")
public String test(User user) {
    System.out.println("进来了test");
    return "test";
}
  1. 完毕

进阶篇

@Lock 注解参数介绍

    /**
     * REENTRANT(可重入锁),FAIR(公平锁),MULTIPLE(联锁),REDLOCK(红锁),READ(读锁), WRITE(写锁), 
     * AUTO(自动模式,当参数只有一个.使用 REENTRANT 参数多个 MULTIPLE)
     */
    LockModel lockModel() default LockModel.AUTO;
    /**
     * 需要锁定的keys
     * @return
     */
    String[] keys() default {};
    /**
     * 锁超时时间,默认30000毫秒(可在配置文件全局设置)
     * @return
     */
    long lockWatchdogTimeout() default 0;
    /**
     * 等待加锁超时时间,默认10000毫秒 -1 则表示一直等待(可在配置文件全局设置)
     * @return
     */
    long attemptTimeout() default 0;

如何使用redisson 客户端实现自定义操作,只需要在spring 容器中注入redisson客户端就行,如下:

    @Autowired
    private RedissonClient redissonClient;

集群模式配置(也可以使用yml写法)

单例模式

单机版redis

#单Redis节点模式
redisson.singleServerConfig.address=127.0.0.1:6379

集群模式

集群模式除了适用于Redis集群环境,也适用于任何云计算服务商提供的集群模式,例如AWS ElastiCache集群版、Azure Redis Cache和阿里云(Aliyun)的云数据库Redis版。

#集群模式
redisson.model=CLUSTER
#redis机器.一直累加下去
redisson.multiple-server-config.node-addresses[0]=127.0.0.1:6379
redisson.multiple-server-config.node-addresses[1]=127.0.0.1:6380
redisson.multiple-server-config.node-addresses[2]=127.0.0.1:6381

云托管模式

云托管模式适用于任何由云计算运营商提供的Redis云服务,包括亚马逊云的AWS ElastiCache、微软云的Azure Redis 缓存和阿里云(Aliyun)的云数据库Redis版

#云托管模式
redisson.model=REPLICATED
#redis机器.一直累加下去
redisson.multiple-server-config.node-addresses[0]=127.0.0.1:6379
redisson.multiple-server-config.node-addresses[1]=127.0.0.1:6380
redisson.multiple-server-config.node-addresses[2]=127.0.0.1:6381

哨兵模式

redisson.model=SENTINEL
#主服务器的名称是哨兵进程中用来监测主从服务切换情况的。
redisson.multiple-server-config.master-name="mymaster"
#redis机器.一直累加下去
redisson.multiple-server-config.node-addresses[0]=127.0.0.1:6379
redisson.multiple-server-config.node-addresses[1]=127.0.0.1:6380
redisson.multiple-server-config.node-addresses[2]=127.0.0.1:6381

主从模式

redisson.model=MASTERSLAVE
#第一台机器就是主库.其他的为从库
redisson.multiple-server-config.node-addresses[0]=127.0.0.1:6379
redisson.multiple-server-config.node-addresses[1]=127.0.0.1:6380
redisson.multiple-server-config.node-addresses[2]=127.0.0.1:6381

属性列表(基本都是官方参数.我将参数整合了下.分为 公共参数,单例模式参数,集群模式参数)

1.公共参数

属性名 默认值 备注
redisson.password   用于节点身份验证的密码。
redisson.attemptTimeout 10000L 等待获取锁超时时间,-1则是一直等待
redisson.lockModel 单个key默认可重入锁多个key默认联锁 锁的模式.如果不设置, REENTRANT(可重入锁),FAIR(公平锁),MULTIPLE(联锁),REDLOCK(红锁),READ(读锁), WRITE(写锁)
redisson.model SINGLE 集群模式:SINGLE(单例),SENTINEL(哨兵),MASTERSLAVE(主从),CLUSTER(集群),REPLICATED(云托管)
redisson.codec org.redisson.codec.JsonJacksonCodec Redisson的对象编码类是用于将对象进行序列化和反序列化,以实现对该对象在Redis里的读取和存储
redisson.threads 当前处理核数量 * 2 这个线程池数量被所有RTopic对象监听器,RRemoteService调用者和RExecutorService任务共同共享。
redisson.nettyThreads 当前处理核数量 * 2 这个线程池数量是在一个Redisson实例内,被其创建的所有分布式数据类型和服务,以及底层客户端所一同共享的线程池里保存的线程数量。
redisson.transportMode NIO TransportMode.NIO,TransportMode.EPOLL - 需要依赖里有netty-transport-native-epoll包(Linux) TransportMode.KQUEUE - 需要依赖里有 netty-transport-native-kqueue包(macOS)
redisson.idleConnectionTimeout 10000 如果当前连接池里的连接数量超过了最小空闲连接数,而同时有连接空闲时间超过了该数值,那么这些连接将会自动被关闭,并从连接池里去掉。时间单位是毫秒
redisson.connectTimeout 10000 同任何节点建立连接时的等待超时。时间单位是毫秒。
redisson.timeout 3000 等待节点回复命令的时间。该时间从命令发送成功时开始计时。
redisson.retryAttempts 3 如果尝试达到 retryAttempts(命令失败重试次数) 仍然不能将命令发送至某个指定的节点时,将抛出错误。如果尝试在此限制之内发送成功,则开始启用 timeout(命令等待超时) 计时。
redisson.retryInterval 1500 在一条命令发送失败以后,等待重试发送的时间间隔。时间单位是毫秒。
redisson.subscriptionsPerConnection 5 每个连接的最大订阅数量。
redisson.clientName   在Redis节点里显示的客户端名称。
redisson.sslEnableEndpointIdentification true 开启SSL终端识别能力。
redisson.sslProvider JDK 确定采用哪种方式(JDK或OPENSSL)来实现SSL连接。
redisson.sslTruststore   指定SSL信任证书库的路径。
redisson.sslTruststorePassword   指定SSL信任证书库的密码。
redisson.sslKeystore   指定SSL钥匙库的路径。
redisson.sslKeystorePassword   指定SSL钥匙库的密码。
redisson.lockWatchdogTimeout 30000 监控锁的看门狗超时时间单位为毫秒。该参数只适用于分布式锁的加锁请求中未明确使用leaseTimeout参数的情况。如果该看门口未使用lockWatchdogTimeout去重新调整一个分布式锁的lockWatchdogTimeout超时,那么这个锁将变为失效状态。这个参数可以用来避免由Redisson客户端节点宕机或其他原因造成死锁的情况。
redisson.keepPubSubOrder true 通过该参数来修改是否按订阅发布消息的接收顺序出来消息,如果选否将对消息实行并行处理,该参数只适用于订阅发布消息的情况。
  1. 单例模式参数
属性名 默认值 备注
redisson.singleServerConfig.address   服务器地址,必填ip:port
redisson.singleServerConfig.database 0 尝试连接的数据库编号。
redisson.singleServerConfig.subscriptionConnectionMinimumIdleSize 1 用于发布和订阅连接的最小保持连接数(长连接)。Redisson内部经常通过发布和订阅来实现许多功能。长期保持一定数量的发布订阅连接是必须的。
redisson.singleServerConfig.subscriptionConnectionPoolSize 50 用于发布和订阅连接的连接池最大容量。连接池的连接数量自动弹性伸缩。
redisson.singleServerConfig.connectionMinimumIdleSize 32 最小保持连接数(长连接)。长期保持一定数量的连接有利于提高瞬时写入反应速度。
redisson.singleServerConfig.connectionPoolSize 64 连接池最大容量。连接池的连接数量自动弹性伸缩。
redisson.singleServerConfig.dnsMonitoringInterval 5000 用来指定检查节点DNS变化的时间间隔。使用的时候应该确保JVM里的DNS数据的缓存时间保持在足够低的范围才有意义。用-1来禁用该功能。
  1. 集群模式
属性名 默认值 备注
redisson.multiple-server-config.node-addresses   服务器节点地址.必填 
redisson.multiple-server-config.node-addresses[0]=127.0.0.1:6379
redisson.multiple-server-config.node-addresses[1]=127.0.0.1:6380
redisson.multiple-server-config.node-addresses[2]=127.0.0.1:6381
redisson.multiple-server-config.loadBalancer org.redisson.connection.balancer.RoundRobinLoadBalancer 在多Redis服务节点的环境里,可以选用以下几种负载均衡方式选择一个节点:
org.redisson.connection.balancer.WeightedRoundRobinBalancer - 权重轮询调度算法
org.redisson.connection.balancer.RoundRobinLoadBalancer - 轮询调度算法
org.redisson.connection.balancer.RandomLoadBalancer - 随机调度算法
redisson.multiple-server-config.slaveConnectionMinimumIdleSize 32 多从节点的环境里,每个 从服务节点里用于普通操作(非 发布和订阅)的最小保持连接数(长连接)。长期保持一定数量的连接有利于提高瞬时读取反映速度。
redisson.multiple-server-config.slaveConnectionPoolSize 64 多从节点的环境里,每个 从服务节点里用于普通操作(非 发布和订阅)连接的连接池最大容量。连接池的连接数量自动弹性伸缩。
redisson.multiple-server-config.masterConnectionMinimumIdleSize 32 多节点的环境里,每个 主节点的最小保持连接数(长连接)。长期保持一定数量的连接有利于提高瞬时写入反应速度。
redisson.multiple-server-config.masterConnectionPoolSize 64 多主节点的环境里,每个 主节点的连接池最大容量。连接池的连接数量自动弹性伸缩。
redisson.multiple-server-config.readMode SLAVE 设置读取操作选择节点的模式。 可用值为: SLAVE - 只在从服务节点里读取。 MASTER - 只在主服务节点里读取。 MASTER_SLAVE - 在主从服务节点里都可以读取。
redisson.multiple-server-config.subscriptionMode SLAVE 设置订阅操作选择节点的模式。 可用值为: SLAVE - 只在从服务节点里订阅。 MASTER - 只在主服务节点里订阅。
redisson.multiple-server-config.subscriptionConnectionMinimumIdleSize 1 用于发布和订阅连接的最小保持连接数(长连接)。Redisson内部经常通过发布和订阅来实现许多功能。长期保持一定数量的发布订阅连接是必须的。 redisson.multiple-server-config.subscriptionConnectionPoolSize
redisson.multiple-server-config.dnsMonitoringInterval 5000 监测DNS的变化情况的时间间隔。
redisson.multiple-server-config.scanInterval 1000 (集群,哨兵,云托管模特特有) 对Redis集群节点状态扫描的时间间隔。单位是毫秒。
redisson.multiple-server-config.database 0 (哨兵模式,云托管,主从模式特有)尝试连接的数据库编号。
redisson.multiple-server-config.masterName   (哨兵模式特有)主服务器的名称是哨兵进程中用来监测主从服务切换情况的。
的码云指数为
超过 的项目
加载中

评论(0)

暂无评论

暂无资讯

暂无问答

redisson学习示例

官方文档,示例 分布式锁(相关参考) 1、Redisson 分布式锁实现分析(一) 2、基于redis的分布式锁实现 3、对比各类分布式锁缺陷,抓住Redis分布式锁实现命门 4、实现基于redis的分布式锁并...

02/27 16:35
44
0
最详细的自定义Spring Boot Starter开发教程

1. 前言 随着Spring的日渐臃肿,为了简化配置、开箱即用、快速集成,Spring Boot 横空出世。 目前已经成为 Java 目前最火热的框架了。平常我们用Spring Boot开发web应用。Spring mvc 默认使用...

08/19 21:48
19
0
利用redission实现分布式锁(注解实现)

Redisson概述 Redisson是一个在Redis的基础上实现的Java驻内存数据网格(In-Memory Data Grid)。它不仅提供了一系列的分布式的Java常用对象,还提供了许多分布式服务。其中包括(BitSet, Se...

2018/07/30 16:11
1K
0
Spring Boot的启动器Starter详解

Spring Boot的启动器Starter详解 Spring Boot应用启动器基本的一共有44种,具体如下: 1)spring-boot-starter 这是Spring Boot的核心启动器,包含了自动配置、日志和YAML。 2)spring-boot...

2018/02/22 13:12
219
0
Starter POMs详解

Starter POMs是可以包含到应用中的一个方便的依赖关系描述符集合。你可以获取所有Spring及相关技术的一站式服务,而不需要翻阅示例代码,拷贝粘贴大量的依赖描述符。例如,如果你想使用Sprin...

2017/09/25 16:38
34
0
springboot 系列教程二:常用starter介绍

springboot非常的流行,就是因为starter的存在,starter是springboot的核心,可以理解成可插拔的插件,你想要什么插件配置什么插件就可以,比如我想要使用mybatis,那么配置starter-mybatis...

04/13 11:22
106
5
Spring-Boot JAR 包说明

名称 描述 spring-boot-starter Spring Boot核心引导类,包括对auto-config,logging,YAML的支持 spring-boot-starter-actuator 一些有助于管理自己应用程序的生产环境特性 spring-boot-star...

2015/02/06 17:29
152
0
各Spring-Boot-Starters介绍

Spring-Boot-Starters 最通俗的理解— jar 包,引用了什么 starter,就获得了什么的依赖。用游戏类比: SpringBoot—>WeGame spring-boot-starter-web—>英雄联盟及其小工具的合集 SpringMV...

2018/10/17 09:55
90
0

没有更多内容

加载失败,请刷新页面

返回顶部
顶部