redisso-sprig-boot-starter
目前有很多项目还在使用jedis的 setNx 充当分布式锁,然而这个锁是有问题的,redisso是java支持redis的redlock的唯一实现,官方目前只有javaweb版本,配置起来很麻烦.集成该项目后只需要极少的配置.就能够使用redisso的全部功能.目前支持集群模式,云托管模式,单Redis节点模式,哨兵模式,主从模式 配置.支持 可重入锁,公平锁,联锁,红锁,读写锁 锁定模式
介绍我们为什么需要redisso?redisso目前是官方唯一推荐的java版的分布式锁,他支持 redlock.具体请查看 官方文档
jedis为什么有问题?目前jedis是只支持单机的.
jedissetNx和设置过期时间是不同步的,在某些极端的情况下会发生死锁.导致程序崩溃.如果没有设置value,线程1可能会释放线程2的锁详情看下这篇 博客
软件架构redissosprigboot安装教程引入pom.xml<depedecy><groupId>com.zegtegpeg</groupId><artifactId>redisso-sprig-boot-starter</artifactId><versio>1.0.0</versio></depedecy>使用说明在 applicatio.properties 增加#单Redis节点模式redisso.sigleServerCofig.address=127.0.0.1:63792.在方法增加 @Lock 注解
//支持spel表达式如果后面需要接字符串的话请用`+`连接.字符串一定要打`单引号`@Lock(keys="#user.ame+'locks'")publicStrigtest(Useruser){System.out.pritl("进来了test");retur"test";}完毕进阶篇@Lock注解参数介绍/***REENTRANT(可重入锁),FAIR(公平锁),MULTIPLE(联锁),REDLOCK(红锁),READ(读锁),WRITE(写锁),*AUTO(自动模式,当参数只有一个.使用REENTRANT参数多个MULTIPLE)*/LockModellockModel()defaultLockModel.AUTO;/***需要锁定的keys*@retur*/Strig[]keys()default{};/***锁超时时间,默认30000毫秒(可在配置文件全局设置)*@retur*/loglockWatchdogTimeout()default0;/***等待加锁超时时间,默认10000毫秒-1则表示一直等待(可在配置文件全局设置)*@retur*/logattemptTimeout()default0;如何使用redisso 客户端实现自定义操作,只需要在sprig容器中注入redisso客户端就行,如下:@AutowiredprivateRedissoClietredissoCliet;集群模式配置(也可以使用yml写法)单例模式
单机版redis
#单Redis节点模式redisso.sigleServerCofig.address=127.0.0.1:6379集群模式
集群模式除了适用于Redis集群环境,也适用于任何云计算服务商提供的集群模式,例如AWSElastiCache集群版、AzureRedisCache和阿里云(Aliyu)的云数据库Redis版。
#集群模式redisso.model=CLUSTER#redis机器.一直累加下去redisso.multiple-server-cofig.ode-addresses[0]=127.0.0.1:6379redisso.multiple-server-cofig.ode-addresses[1]=127.0.0.1:6380redisso.multiple-server-cofig.ode-addresses[2]=127.0.0.1:6381云托管模式
云托管模式适用于任何由云计算运营商提供的Redis云服务,包括亚马逊云的AWSElastiCache、微软云的AzureRedis缓存和阿里云(Aliyu)的云数据库Redis版
#云托管模式redisso.model=REPLICATED#redis机器.一直累加下去redisso.multiple-server-cofig.ode-addresses[0]=127.0.0.1:6379redisso.multiple-server-cofig.ode-addresses[1]=127.0.0.1:6380redisso.multiple-server-cofig.ode-addresses[2]=127.0.0.1:6381哨兵模式
redisso.model=SENTINEL#主服务器的名称是哨兵进程中用来监测主从服务切换情况的。redisso.multiple-server-cofig.master-ame="mymaster"#redis机器.一直累加下去redisso.multiple-server-cofig.ode-addresses[0]=127.0.0.1:6379redisso.multiple-server-cofig.ode-addresses[1]=127.0.0.1:6380redisso.multiple-server-cofig.ode-addresses[2]=127.0.0.1:6381主从模式
redisso.model=MASTERSLAVE#第一台机器就是主库.其他的为从库redisso.multiple-server-cofig.ode-addresses[0]=127.0.0.1:6379redisso.multiple-server-cofig.ode-addresses[1]=127.0.0.1:6380redisso.multiple-server-cofig.ode-addresses[2]=127.0.0.1:6381属性列表(基本都是官方参数.我将参数整合了下.分为 公共参数,单例模式参数,集群模式参数)1.公共参数
属性名默认值备注redisso.password 用于节点身份验证的密码。redisso.attemptTimeout10000L等待获取锁超时时间,-1则是一直等待redisso.lockModel单个key默认可重入锁多个key默认联锁锁的模式.如果不设置,REENTRANT(可重入锁),FAIR(公平锁),MULTIPLE(联锁),REDLOCK(红锁),READ(读锁),WRITE(写锁)redisso.modelSINGLE集群模式:SINGLE(单例),SENTINEL(哨兵),MASTERSLAVE(主从),CLUSTER(集群),REPLICATED(云托管)redisso.codecorg.redisso.codec.JsoJacksoCodecRedisso的对象编码类是用于将对象进行序列化和反序列化,以实现对该对象在Redis里的读取和存储redisso.threads当前处理核数量*2这个线程池数量被所有RTopic对象监听器,RRemoteService调用者和RExecutorService任务共同共享。redisso.ettyThreads当前处理核数量*2这个线程池数量是在一个Redisso实例内,被其创建的所有分布式数据类型和服务,以及底层客户端所一同共享的线程池里保存的线程数量。redisso.trasportModeNIOTrasportMode.NIO,TrasportMode.EPOLL-需要依赖里有etty-trasport-ative-epoll包(Liux)TrasportMode.KQUEUE-需要依赖里有etty-trasport-ative-kqueue包(macOS)redisso.idleCoectioTimeout10000如果当前连接池里的连接数量超过了最小空闲连接数,而同时有连接空闲时间超过了该数值,那么这些连接将会自动被关闭,并从连接池里去掉。时间单位是毫秒redisso.coectTimeout10000同任何节点建立连接时的等待超时。时间单位是毫秒。redisso.timeout3000等待节点回复命令的时间。该时间从命令发送成功时开始计时。redisso.retryAttempts3如果尝试达到retryAttempts(命令失败重试次数)仍然不能将命令发送至某个指定的节点时,将抛出错误。如果尝试在此限制之内发送成功,则开始启用timeout(命令等待超时)计时。redisso.retryIterval1500在一条命令发送失败以后,等待重试发送的时间间隔。时间单位是毫秒。redisso.subscriptiosPerCoectio5每个连接的最大订阅数量。redisso.clietName 在Redis节点里显示的客户端名称。redisso.sslEableEdpoitIdetificatiotrue开启SSL终端识别能力。redisso.sslProviderJDK确定采用哪种方式(JDK或OPENSSL)来实现SSL连接。redisso.sslTruststore 指定SSL信任证书库的路径。redisso.sslTruststorePassword 指定SSL信任证书库的密码。redisso.sslKeystore 指定SSL钥匙库的路径。redisso.sslKeystorePassword 指定SSL钥匙库的密码。redisso.lockWatchdogTimeout30000监控锁的看门狗超时时间单位为毫秒。该参数只适用于分布式锁的加锁请求中未明确使用leaseTimeout参数的情况。如果该看门口未使用lockWatchdogTimeout去重新调整一个分布式锁的lockWatchdogTimeout超时,那么这个锁将变为失效状态。这个参数可以用来避免由Redisso客户端节点宕机或其他原因造成死锁的情况。redisso.keepPubSubOrdertrue通过该参数来修改是否按订阅发布消息的接收顺序出来消息,如果选否将对消息实行并行处理,该参数只适用于订阅发布消息的情况。单例模式参数属性名默认值备注redisso.sigleServerCofig.address 服务器地址,必填ip:portredisso.sigleServerCofig.database0尝试连接的数据库编号。redisso.sigleServerCofig.subscriptioCoectioMiimumIdleSize1用于发布和订阅连接的最小保持连接数(长连接)。Redisso内部经常通过发布和订阅来实现许多功能。长期保持一定数量的发布订阅连接是必须的。redisso.sigleServerCofig.subscriptioCoectioPoolSize50用于发布和订阅连接的连接池最大容量。连接池的连接数量自动弹性伸缩。redisso.sigleServerCofig.coectioMiimumIdleSize32最小保持连接数(长连接)。长期保持一定数量的连接有利于提高瞬时写入反应速度。redisso.sigleServerCofig.coectioPoolSize64连接池最大容量。连接池的连接数量自动弹性伸缩。redisso.sigleServerCofig.dsMoitorigIterval5000用来指定检查节点DNS变化的时间间隔。使用的时候应该确保JVM里的DNS数据的缓存时间保持在足够低的范围才有意义。用-1来禁用该功能。集群模式属性名默认值备注redisso.multiple-server-cofig.ode-addresses 服务器节点地址.必填 redisso.multiple-server-cofig.ode-addresses[0]=127.0.0.1:6379redisso.multiple-server-cofig.ode-addresses[1]=127.0.0.1:6380redisso.multiple-server-cofig.ode-addresses[2]=127.0.0.1:6381redisso.multiple-server-cofig.loadBalacerorg.redisso.coectio.balacer.RoudRobiLoadBalacer在多Redis服务节点的环境里,可以选用以下几种负载均衡方式选择一个节点:org.redisso.coectio.balacer.WeightedRoudRobiBalacer-权重轮询调度算法org.redisso.coectio.balacer.RoudRobiLoadBalacer-轮询调度算法org.redisso.coectio.balacer.RadomLoadBalacer-随机调度算法redisso.multiple-server-cofig.slaveCoectioMiimumIdleSize32多从节点的环境里,每个从服务节点里用于普通操作(非发布和订阅)的最小保持连接数(长连接)。长期保持一定数量的连接有利于提高瞬时读取反映速度。redisso.multiple-server-cofig.slaveCoectioPoolSize64多从节点的环境里,每个从服务节点里用于普通操作(非发布和订阅)连接的连接池最大容量。连接池的连接数量自动弹性伸缩。redisso.multiple-server-cofig.masterCoectioMiimumIdleSize32多节点的环境里,每个主节点的最小保持连接数(长连接)。长期保持一定数量的连接有利于提高瞬时写入反应速度。redisso.multiple-server-cofig.masterCoectioPoolSize64多主节点的环境里,每个主节点的连接池最大容量。连接池的连接数量自动弹性伸缩。redisso.multiple-server-cofig.readModeSLAVE设置读取操作选择节点的模式。可用值为:SLAVE-只在从服务节点里读取。MASTER-只在主服务节点里读取。MASTER_SLAVE-在主从服务节点里都可以读取。redisso.multiple-server-cofig.subscriptioModeSLAVE设置订阅操作选择节点的模式。可用值为:SLAVE-只在从服务节点里订阅。MASTER-只在主服务节点里订阅。redisso.multiple-server-cofig.subscriptioCoectioMiimumIdleSize1用于发布和订阅连接的最小保持连接数(长连接)。Redisso内部经常通过发布和订阅来实现许多功能。长期保持一定数量的发布订阅连接是必须的。redisso.multiple-server-cofig.subscriptioCoectioPoolSizeredisso.multiple-server-cofig.dsMoitorigIterval5000监测DNS的变化情况的时间间隔。redisso.multiple-server-cofig.scaIterval1000(集群,哨兵,云托管模特特有)对Redis集群节点状态扫描的时间间隔。单位是毫秒。redisso.multiple-server-cofig.database0(哨兵模式,云托管,主从模式特有)尝试连接的数据库编号。redisso.multiple-server-cofig.masterName (哨兵模式特有)主服务器的名称是哨兵进程中用来监测主从服务切换情况的。






评论