目前有很多项目还在使用jedis的 setNx
充当分布式锁,然而这个锁是有问题的,redisson是java支持redis的redlock的唯一
实现, 官方目前只有java web版本,配置起来很麻烦.集成该项目后只需要极少的配置.就能够使用redisson的全部功能. 目前支持集群模式
,云托管模式
,单Redis节点模式
,哨兵模式
,主从模式
配置. 支持 可重入锁
,公平锁
,联锁
,红锁
,读写锁
锁定模式
redisson
?
redisson
目前是官方唯一推荐的java版的分布式锁,他支持redlock
.具体请查看 官方文档
目前jedis是只支持单机的.
jedis setNx 和设置过期时间是不同步的,在某些极端的情况下会发生死锁.导致程序崩溃.如果没有设置value, 线程1可能会释放线程2的锁 详情看下这篇 博客
<dependency> <groupId>com.zengtengpeng</groupId> <artifactId>redisson-spring-boot-starter</artifactId> <version>1.0.0</version> </dependency>
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"; }
/** * 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;
单例模式
单机版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 | 通过该参数来修改是否按订阅发布消息的接收顺序出来消息,如果选否将对消息实行并行处理,该参数只适用于订阅发布消息的情况。 |
- 单例模式参数
属性名 | 默认值 | 备注 |
---|---|---|
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来禁用该功能。 |
- 集群模式
属性名 | 默认值 | 备注 |
---|---|---|
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 | (哨兵模式特有)主服务器的名称是哨兵进程中用来监测主从服务切换情况的。 |
前言 redisson-spring-boot-starter最新版本是3.12.3,支持两种配置方式,首先是完全兼容spring-boot-starter-data-redis的配置,第二可以使用redisson自己的配置方式。 1.在maven pom文件中引入依赖 <dependency> <groupId>org.redisson</groupId>
https://github.com/redisson/redisson/tree/master/redisson-spring-boot-starter#spring-boot-starter 由于最新版的redisson-spring-boot-starter支持2.2.x,看下图,如果历史项目中是springboot1,那就需要调整下redisson-spring-data,否则不支持
redisson-spring-boot-starter 目前有很多项目还在使用jedis的 setNx 充当分布式锁,然而这个锁是有问题的,redisson是java支持redis的redlock的唯一实现, 集成该项目后只需要极少的配置.就能够使用redisson的全部功能. 目前支持 集群模式,云托管模式,单Redis节点模式,哨兵模式,主从模式 配置. 支持 可重入锁,公平锁,联锁,红锁,
1.引用: <dependency> <groupId>org.redisson</groupId> <artifactId>redisson-spring-boot-starter</artifactId> <version>3.15.3</version> </dependency> 2. # common spring bo
https://github.com/redisson/redisson/blob/master/redisson-spring-boot-starter/README.md Integrates Redisson with Spring Boot library. Depends on Spring Data Redis module. dependency spring-boot-starte
spring-boot-starter-redis 1.4.1.RELEASE版本 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-redis</artifactId> <vers
1、pom文件添加 <dependency> <groupId>org.redisson</groupId> <artifactId>redisson-spring-boot-starter</artifactId> <version>3.15.1</version> </dependency>
1、pom <dependency> <groupId>org.redisson</groupId> <artifactId>redisson-spring-boot-starter</artifactId> <version>3.15.1</version> </dependency> 2、
spring boot的版本号为1.5.0的时候 添加spring-boot-starter-reids就找不到jar包了,也就是这个jar包直接被废弃了。所以千万要注意的是:如果你的spring boot的版本号在1.5.0以后的,添加redis的jar包就必须是spring-boot-starter-data-redis
Redisson是架设在Redis基础上的一个Java驻内存数据网格(In-Memory Data Grid)。【Redis官方推荐】 Redisson在基于NIO的Netty框架上,充分的利用了Redis键值数据库提供的一系列优势,在Java实用工具包中常用接口的基础上,为使用者提供了一系列具有分布式特性的常用工具类。使得原本作为协调单机多线程并发程序的工具包获得了协调分布式多机多线程并发系统的
前言 相信很多人都用过vue-cli或create-react-app或者类似的脚手架。 脚手架方便我们复制,粘贴,或者clone代码库,而且还可以更具用户的选择,引入用户所需要的插件。 脚手架往往搭配着早已设计好了架构的项目,然后按需进行拷贝。 Yeoman 介绍 官网介绍: The web's scaffolding tool for modern webapps. yeoman是一款来做脚手
脚手架工具 脚手架是指为整个应用生成一个初始化的模板, 而不是生成访问数据库的代码. Yeoman Slush
问题内容: 我刚刚通过Maven导入了Redisson 1.0.3,在默认端口上的本地主机上设置了Redis服务器,并想尝试Redisson Redis客户端。我的测试代码如下: 但我得到: 如Redisson中的建议:WRITE_BIGDECIMAL_AS_PLAIN,我添加了依赖项: 但是没有变化…我猜想redisson的依赖关系被打破了,但是我该如何解决呢? 问题答案: 看来我的类路径已经包
shiro-redisson 是一个 Apache Shiro 的扩展组件,提供了基于 redis 实现的缓存和会话,以支持分布式环境下的应用。底层使用了 redisson 作为 redis 客户端。 Maven: com.github.streamone shiro-redisson 1.5.0.RELEASE 特性: 缓存 支持遵照 Spring Cache 标准的缓存配置
脚手架允许我们轻松地skeleton for a web application创建skeleton for a web application 。 我们手动创建了我们的公共目录,添加了中间件,创建了单独的路径文件等。脚手架工具为我们设置了所有这些东西,以便我们可以直接开始构建我们的应用程序。 我们将使用的脚手架叫做Yeoman 。 它是为Node.js构建的脚手架工具,但也有几个其他框架的生成器