spring集成redisson踩過(guò)的坑
我用spring的xml集成一直報(bào)錯(cuò),所以只能選擇注解方式:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
@Configuration public class RedissionConfig { Logger log = LoggerFactory.getLogger(RedissionConfig. class ); @Value ( "${redis_ip}" ) String redis_ip; @Value ( "${redis_port}" ) String redis_port; @Value ( "${redis_password}" ) String redis_password; @Bean (name= "redissonClient" ) public RedissonClient init(){ log.info( "redis_ip:" +redis_ip); log.info( "redis_port:" +redis_port); log.info( "redis_password:" +redis_password); Config config = new Config(); String url = "redis://" +redis_ip+ ":" +redis_port; log.info(url); config.useSingleServer().setAddress(url).setPassword(redis_password); RedissonClient redissonClient = Redisson.create(config); log.info( "初始化RedissonClient" ); return redissonClient; } } |
第一坑就是版本兼容問(wèn)題
我用的Spring是4.2.7,第一次集成的是3.12.0,會(huì)報(bào)以下錯(cuò)誤:
嚴(yán)重: Unable to process Jar entry [module-info.class] from Jar [jar:file:/C:/Users/Administrator/.m2/repository/com/fasterxml/jackson/dataformat/jackson-dataformat-yaml/2.10.1/jackson-dataformat-yaml-2.10.1.jar!/] for annotations org.apache.tomcat.util.bcel.classfile.ClassFormatException: Invalid byte tag in constant pool: 19 at org.apache.tomcat.util.bcel.classfile.Constant.readConstant(Constant.java:133) at org.apache.tomcat.util.bcel.classfile.ConstantPool.<init>(ConstantPool.java:60) at org.apache.tomcat.util.bcel.classfile.ClassParser.readConstantPool(ClassParser.java:209) at org.apache.tomcat.util.bcel.classfile.ClassParser.parse(ClassParser.java:119) at org.apache.catalina.startup.ContextConfig.processAnnotationsStream(ContextConfig.java:2134) at org.apache.catalina.startup.ContextConfig.processAnnotationsJar(ContextConfig.java:2010) at org.apache.catalina.startup.ContextConfig.processAnnotationsUrl(ContextConfig.java:1976) at org.apache.catalina.startup.ContextConfig.processAnnotations(ContextConfig.java:1961) at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1319) at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:878) at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:376) at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119) at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5322) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549) at java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:266) at java.util.concurrent.FutureTask.run(FutureTask.java) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:748)
所以把版本降低到3.10.0,就不會(huì)報(bào)錯(cuò)了。
第二個(gè)坑是設(shè)置密碼問(wèn)題
因?yàn)橐獏^(qū)分多環(huán)境,所以把redis的信息寫到配置文件中,如果按照上面的配置,會(huì)報(bào)以下錯(cuò)誤:
Caused by: org.redisson.client.RedisException: ERR Client sent AUTH, but no password is set. channel: [id: 0xe37c85e0, L:/192.168.0.128:54867 - R:192.168.0.128/192.168.0.128:5802] command: (AUTH), params: [] at org.redisson.client.handler.CommandDecoder.decode(CommandDecoder.java:314) at org.redisson.client.handler.CommandDecoder.decodeCommand(CommandDecoder.java:130) at org.redisson.client.handler.CommandDecoder.decode(CommandDecoder.java:110) at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:502) at io.netty.handler.codec.ReplayingDecoder.callDecode(ReplayingDecoder.java:366) at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:278) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340) at io.netty.channel.ChannelInboundHandlerAdapter.channelRead(ChannelInboundHandlerAdapter.java:86) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340) at io.netty.channel.ChannelInboundHandlerAdapter.channelRead(ChannelInboundHandlerAdapter.java:86) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340) at io.netty.channel.ChannelInboundHandlerAdapter.channelRead(ChannelInboundHandlerAdapter.java:86) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340) at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1434) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:965) at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:163) at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:656) at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:591) at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:508) at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:470) ... 3 more
所以要判斷密碼是否為空,如果是空不做參數(shù)即可,下面是改正過(guò)的代碼:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
public RedissonClient init(){ log.info( "redis_ip:" +redis_ip); log.info( "redis_port:" +redis_port); log.info( "redis_password:" +redis_password); Config config = new Config(); String url = "redis://" +redis_ip+ ":" +redis_port; log.info(url); SingleServerConfig singleServerConfig = config.useSingleServer().setAddress(url); if (!StringUtils.isEmpty(redis_password)){ singleServerConfig.setPassword(redis_password); } RedissonClient redissonClient = Redisson.create(config); log.info( "初始化RedissonClient" ); return redissonClient; } |
另外,網(wǎng)上的帖子好多直接放的ip+端口號(hào),但是我本地會(huì)報(bào)錯(cuò),一定在加redis://192.168.2.128:6379這種格式的,可能是因?yàn)榘姹締?wèn)題,也有可能就是誤導(dǎo)人的。
看到上面的報(bào)錯(cuò),感覺(jué)知道xml的錯(cuò)誤了:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
< beans xmlns = "http://www.springframework.org/schema/beans" xmlns:context = "http://www.springframework.org/schema/context" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xmlns:redisson = "http://redisson.org/schema/redisson" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd http://redisson.org/schema/redisson http://redisson.org/schema/redisson/redisson.xsd"> < beans profile = "development" > <!--redisson --> <!--<redisson:client id="redissonClient"> <redisson:single-server address="redis://182.92.97.141:5802"/> </redisson:client>--> </ beans > |
沒(méi)有設(shè)置密碼,一定不要把password屬性放上去,要不會(huì)報(bào)錯(cuò)的~
spring整合redisson配置
配置方式
redis的部署方式有單節(jié)點(diǎn)部署、哨兵方式部署、集群方式部署3種方式
各種配置方式可以去看xsd文件:redisson-1.1.xsd
1
2
3
4
|
<xsd:element name= "single-server" > // 單節(jié)點(diǎn) <xsd:element name= "sentinel-servers" > // 哨兵 <xsd:element name= "cluster-servers" > // 集群 <xsd:element name= "master-slave-servers" > // 主從 |
等其他方式
單節(jié)點(diǎn)配置standalone
單純的java代碼,基于單節(jié)點(diǎn)部署為了保證數(shù)據(jù)的備份,一般會(huì)添加一個(gè)節(jié)點(diǎn)作為slave來(lái)備份master節(jié)點(diǎn)上的數(shù)據(jù)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
//創(chuàng)建配置 Config config = new Config(); //指定使用單節(jié)點(diǎn)部署方式 config.useSingleServer().setAddress( "redis://127.0.0.1:6379" ); //創(chuàng)建客戶端(發(fā)現(xiàn)這一非常耗時(shí),基本在2秒-4秒左右) RedissonClient redisson = Redisson.create(config); //首先獲取redis中的key-value對(duì)象,key不存在沒(méi)關(guān)系 RBucket<String> keyObject = redisson.getBucket( "key" ); //如果key存在,就設(shè)置key的值為新值value //如果key不存在,就設(shè)置key的值為value keyObject.set( "value" ); //最后關(guān)閉RedissonClient redisson.shutdown(); |
spring整合pom
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
<!--redisson--> < dependency > < groupId >org.redisson</ groupId > < artifactId >redisson</ artifactId > < version >2.10.4</ version > </ dependency > <!--redis--> < dependency > < groupId >redis.clients</ groupId > < artifactId >jedis</ artifactId > < version >1.7.1.RELEASE</ version > </ dependency > < dependency > < groupId >org.springframework.data</ groupId > < artifactId >spring-data-redis</ artifactId > < version >1.7.1.RELEASE</ version > </ dependency > |
spring整合redisson.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
< beans xmlns = "http://www.springframework.org/schema/beans" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xmlns:context = "http://www.springframework.org/schema/context" xmlns:redisson = "http://redisson.org/schema/redisson" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://redisson.org/schema/redisson http://redisson.org/schema/redisson/redisson.xsd"> < redisson:client id = "standalone" name = "aliasName1,aliasName2" > < redisson:single-server address = "redis://127.0.0.1:6379" /> </ redisson:client > </ beans > |
哨兵配置sentinel
純java代碼
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
//創(chuàng)建配置 Config config = new Config(); //指定使用哨兵部署方式 config.useSentinelServers() //設(shè)置sentinel.conf配置里的sentinel別名 //比如sentinel.conf里配置為sentinel monitor my-sentinel-name 127.0.0.1 6379 2,那么這里就配置my-sentinel-name .setMasterName( "my-sentinel-name" ) //這里設(shè)置sentinel節(jié)點(diǎn)的服務(wù)IP和端口,sentinel是采用Paxos拜占庭協(xié)議,一般sentinel至少3個(gè)節(jié)點(diǎn) //記住這里不是配置redis節(jié)點(diǎn)的服務(wù)端口和IP,sentinel會(huì)自己把請(qǐng)求轉(zhuǎn)發(fā)給后面monitor的redis節(jié)點(diǎn) .addSentinelAddress( "redis://127.0.0.1:26379" ) .addSentinelAddress( "redis://127.0.0.1:26389" ) .addSentinelAddress( "redis://127.0.0.1:26399" ); //創(chuàng)建客戶端(發(fā)現(xiàn)這一非常耗時(shí),基本在2秒-4秒左右) RedissonClient redisson = Redisson.create(config); //首先獲取redis中的key-value對(duì)象,key不存在沒(méi)關(guān)系 RBucket<String> keyObject = redisson.getBucket( "key" ); //如果key存在,就設(shè)置key的值為新值value //如果key不存在,就設(shè)置key的值為value keyObject.set( "value" ); //最后關(guān)閉RedissonClient redisson.shutdown(); |
spring整合redis和redisson的配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
<? xml version = "1.0" encoding = "UTF-8" ?> < beans xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xmlns = "http://www.springframework.org/schema/beans" xmlns:redisson = "http://redisson.org/schema/redisson" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://redisson.org/schema/redisson http://redisson.org/schema/redisson/redisson.xsd"> <!-- 構(gòu)造JedisConnectionFactory實(shí)例,注入池配置poolConfig和哨兵配置sentinelConfig--> < bean id = "jedisConnectionFactory" class = "org.springframework.data.redis.connection.jedis.JedisConnectionFactory" > <!--<constructor-arg index="0" ref="redisSentinelConfiguration"/>--> <!--<constructor-arg index="1" ref="jedisPoolConfig"/>--> < constructor-arg ref = "redisSentinelConfiguration" /> < property name = "poolConfig" ref = "jedisPoolConfig" /> < property name = "database" value = "${redis.database}" /> </ bean > <!-- 配置JedisPoolConfig--> < bean id = "jedisPoolConfig" class = "redis.clients.jedis.JedisPoolConfig" > < property name = "minIdle" value = "${redis.minIdle}" /> < property name = "maxIdle" value = "${redis.maxIdle}" /> < property name = "maxTotal" value = "${redis.maxTotal}" /> < property name = "testOnBorrow" value = "${redis.testOnBorrow}" /> < property name = "testWhileIdle" value = "${redis.testWhileIdle}" /> < property name = "testOnReturn" value = "${redis.testOnReturn}" /> < property name = "numTestsPerEvictionRun" value = "${redis.numTestsPerEvictionRun}" /> < property name = "maxWaitMillis" value = "${redis.maxWaitMillis}" /> </ bean > <!-- 配置RedisSentinelConfiguration--> < bean id = "redisSentinelConfiguration" class = "org.springframework.data.redis.connection.RedisSentinelConfiguration" > < property name = "master" > < bean class = "org.springframework.data.redis.connection.RedisNode" > < property name = "name" value = "${redis.masterName}" /> </ bean > </ property > < property name = "sentinels" > < set > < bean class = "org.springframework.data.redis.connection.RedisNode" > < constructor-arg index = "0" value = "${redis.host}" /> < constructor-arg index = "1" value = "${redis.port}" /> </ bean > </ set > </ property > </ bean > <!-- 用于緩存對(duì)象--> < bean id = "redisTemplate" class = "org.springframework.data.redis.core.RedisTemplate" > < property name = "connectionFactory" ref = "jedisConnectionFactory" /> <!-- key --> < property name = "keySerializer" > < bean class = "org.springframework.data.redis.serializer.StringRedisSerializer" /> </ property > < property name = "hashKeySerializer" > < bean class = "org.springframework.data.redis.serializer.StringRedisSerializer" /> </ property > <!-- value --> < property name = "valueSerializer" > < bean class = "org.springframework.data.redis.serializer.JdkSerializationRedisSerializer" /> </ property > < property name = "hashValueSerializer" > < bean class = "org.springframework.data.redis.serializer.JdkSerializationRedisSerializer" /> </ property > </ bean > <!-- 用于緩存字符串--> < bean id = "stringRedisTemplate" class = "org.springframework.data.redis.core.StringRedisTemplate" > < property name = "connectionFactory" ref = "jedisConnectionFactory" /> </ bean > < redisson:client id = "redissonClient" > <!--master-name為redis的主節(jié)點(diǎn)名稱--> < redisson:sentinel-servers master-name = "mymaster" > <!-- 可以配置多個(gè) --> < redisson:sentinel-address value = "redis://172.17.46.11:26379" /> </ redisson:sentinel-servers > </ redisson:client > </ beans > |
使用
1
2
3
4
5
6
7
8
9
10
|
@Autowired @Lazy private RedissonClient redissonClient; /** * @param key 具體鍵值 * @return 鎖對(duì)象 */ public RReadWriteLock getLock(String key) { return redissonClient.getReadWriteLock(key); } |
集群配置cluster
純java代碼
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
//創(chuàng)建配置 Config config = new Config(); //指定使用集群部署方式 config.useClusterServers() // 集群狀態(tài)掃描間隔時(shí)間,單位是毫秒 .setScanInterval( 2000 ) //cluster方式至少6個(gè)節(jié)點(diǎn)(3主3從,3主做sharding,3從用來(lái)保證主宕機(jī)后可以高可用) .addNodeAddress( "redis://127.0.0.1:6379" ) .addNodeAddress( "redis://127.0.0.1:6380" ) .addNodeAddress( "redis://127.0.0.1:6381" ) .addNodeAddress( "redis://127.0.0.1:6382" ) .addNodeAddress( "redis://127.0.0.1:6383" ) .addNodeAddress( "redis://127.0.0.1:6384" ); //創(chuàng)建客戶端(發(fā)現(xiàn)這一非常耗時(shí),基本在2秒-4秒左右) RedissonClient redisson = Redisson.create(config); //首先獲取redis中的key-value對(duì)象,key不存在沒(méi)關(guān)系 RBucket<String> keyObject = redisson.getBucket( "key" ); //如果key存在,就設(shè)置key的值為新值value //如果key不存在,就設(shè)置key的值為value keyObject.set( "value" ); //最后關(guān)閉RedissonClient redisson.shutdown(); |
spring整合redisson配置方式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
<? xml version = "1.0" encoding = "UTF-8" ?> < beans xmlns = "http://www.springframework.org/schema/beans" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xmlns:redisson = "http://redisson.org/schema/redisson" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://redisson.org/schema/redisson http://redisson.org/schema/redisson/redisson.xsd"> <!-- Redis 連接池配置 --> < bean id = "poolConfig" class = "redis.clients.jedis.JedisPoolConfig" > < property name = "minIdle" value = "${redis.minIdle}" /> < property name = "maxIdle" value = "${redis.maxIdle}" /> < property name = "maxTotal" value = "${redis.maxTotal}" /> < property name = "testOnBorrow" value = "${redis.testOnBorrow}" /> < property name = "testWhileIdle" value = "${redis.testWhileIdle}" /> < property name = "testOnReturn" value = "${redis.testOnReturn}" /> < property name = "numTestsPerEvictionRun" value = "${redis.numTestsPerEvictionRun}" /> < property name = "maxWaitMillis" value = "${redis.maxWaitMillis}" /> < property name = "timeBetweenEvictionRunsMillis" value = "30000" /> </ bean > <!-- jedisCluster 配置 --> <!-- 自定義的工廠類,實(shí)現(xiàn)了FactoryBean<JedisCluster>接口 --> < bean id = "jedisCluster" class = "com.xxxxx.JedisClusterFactory" > <!-- address: 集群配置 --> < property name = "address" value = "${redisColony.host}" /> <!-- timeout: 連接超時(shí)時(shí)間 --> < property name = "timeout" value = "100000" /> <!-- maxRedirections: 最大重定向 --> < property name = "maxRedirections" value = "5" /> <!-- 連接池 --> < property name = "genericObjectPoolConfig" ref = "poolConfig" /> </ bean > <!--redisson的實(shí)例 --> < redisson:client id = "redissonClient" > < redisson:cluster-servers > <!-- 節(jié)點(diǎn)地址同redis集群的節(jié)點(diǎn) --> < redisson:node-address value = "${redisColony.host1}" /> < redisson:node-address value = "${redisColony.host2}" /> < redisson:node-address value = "${redisColony.host3}" /> < redisson:node-address value = "${redisColony.host4}" /> < redisson:node-address value = "${redisColony.host5}" /> < redisson:node-address value = "${redisColony.host6}" /> </ redisson:cluster-servers > </ redisson:client > </ beans > |
properties文件
1
2
3
4
5
6
7
8
9
|
redisColony.host = 172.17.46.11:36379,172.17.46.11:36381,172.17.45.12:36379,172.17.45.12:36381,172.17.45.13:36379,172.17.45.13:36381 redis.timeOut = 100000 redis.redirection = 5 redisColony.host1 = redis://172.17.46.11:36379 redisColony.host2 = redis://172.17.46.11:36381 redisColony.host3 = redis://172.17.45.12:36379 redisColony.host4 = redis://172.17.45.12:36381 redisColony.host5 = redis://172.17.45.13:36379 redisColony.host6 = redis://172.17.45.13:36381 |
使用方式與哨兵配置方式相同,@Autowired注入即可
主從部署方式(master/slave)
純java代碼
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
//創(chuàng)建配置 Config config = new Config(); //指定使用主從部署方式 config.useMasterSlaveServers() //設(shè)置redis主節(jié)點(diǎn) .setMasterAddress( "redis://127.0.0.1:6379" ) //設(shè)置redis從節(jié)點(diǎn) .addSlaveAddress( "redis://127.0.0.1:6380" , "redis://127.0.0.1:6381" ); //創(chuàng)建客戶端(發(fā)現(xiàn)這一非常耗時(shí),基本在2秒-4秒左右) RedissonClient redisson = Redisson.create(config); //首先獲取redis中的key-value對(duì)象,key不存在沒(méi)關(guān)系 RBucket<String> keyObject = redisson.getBucket( "key" ); //如果key存在,就設(shè)置key的值為新值value //如果key不存在,就設(shè)置key的值為value keyObject.set( "value" ); //最后關(guān)閉RedissonClient redisson.shutdown(); |
spring整合redisson.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
< beans xmlns = "http://www.springframework.org/schema/beans" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xmlns:context = "http://www.springframework.org/schema/context" xmlns:redisson = "http://redisson.org/schema/redisson" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://redisson.org/schema/redisson http://redisson.org/schema/redisson/redisson.xsd"> < redisson:client id = "masterSlave" > < redisson:master-slave-servers master-address = "redis://127.0.0.1:6379" > < redisson:slave-address value = "redis://127.0.0.1:6380" /> < redisson:slave-address value = "redis://127.0.0.1:6381" /> </ redisson:master-slave-servers > </ redisson:client > </ beans > |
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持服務(wù)器之家。
原文鏈接:https://blog.csdn.net/zhaochao0037/article/details/106409989