一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 解決spring集成redisson踩過的坑

解決spring集成redisson踩過的坑

2021-12-29 11:49丶諸子百家 Java教程

這篇文章主要介紹了spring集成redisson踩過的坑,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

spring集成redisson踩過的坑

我用spring的xml集成一直報錯,所以只能選擇注解方式:

?
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;
    }
}

第一坑就是版本兼容問題

我用的Spring是4.2.7,第一次集成的是3.12.0,會報以下錯誤:

嚴重: 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,就不會報錯了。

第二個坑是設置密碼問題

因為要區分多環境,所以把redis的信息寫到配置文件中,如果按照上面的配置,會報以下錯誤:

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

所以要判斷密碼是否為空,如果是空不做參數即可,下面是改正過的代碼:

?
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;
    }

另外,網上的帖子好多直接放的ip+端口號,但是我本地會報錯,一定在加redis://192.168.2.128:6379這種格式的,可能是因為版本問題,也有可能就是誤導人的。

看到上面的報錯,感覺知道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: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>

沒有設置密碼,一定不要把password屬性放上去,要不會報錯的~

spring整合redisson配置

配置方式

redis的部署方式有單節點部署、哨兵方式部署、集群方式部署3種方式

各種配置方式可以去看xsd文件:redisson-1.1.xsd

?
1
2
3
4
<xsd:element name="single-server"> // 單節點
<xsd:element name="sentinel-servers"> // 哨兵
<xsd:element name="cluster-servers"> // 集群
<xsd:element name="master-slave-servers"> // 主從

等其他方式

單節點配置standalone

單純的java代碼,基于單節點部署為了保證數據的備份,一般會添加一個節點作為slave來備份master節點上的數據

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//創建配置 
Config config = new Config(); 
//指定使用單節點部署方式 
config.useSingleServer().setAddress("redis://127.0.0.1:6379"); 
//創建客戶端(發現這一非常耗時,基本在2秒-4秒左右) 
RedissonClient redisson = Redisson.create(config); 
  
//首先獲取redis中的key-value對象,key不存在沒關系 
RBucket<String> keyObject = redisson.getBucket("key"); 
//如果key存在,就設置key的值為新值value 
//如果key不存在,就設置key的值為value 
keyObject.set("value"); 
  
//最后關閉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
//創建配置 
Config config = new Config(); 
//指定使用哨兵部署方式 
config.useSentinelServers() 
    //設置sentinel.conf配置里的sentinel別名 
    //比如sentinel.conf里配置為sentinel monitor my-sentinel-name 127.0.0.1 6379 2,那么這里就配置my-sentinel-name 
    .setMasterName("my-sentinel-name"
    //這里設置sentinel節點的服務IP和端口,sentinel是采用Paxos拜占庭協議,一般sentinel至少3個節點 
    //記住這里不是配置redis節點的服務端口和IP,sentinel會自己把請求轉發給后面monitor的redis節點 
    .addSentinelAddress("redis://127.0.0.1:26379"
    .addSentinelAddress("redis://127.0.0.1:26389"
    .addSentinelAddress("redis://127.0.0.1:26399"); 
  
//創建客戶端(發現這一非常耗時,基本在2秒-4秒左右) 
RedissonClient redisson = Redisson.create(config); 
//首先獲取redis中的key-value對象,key不存在沒關系 
RBucket<String> keyObject = redisson.getBucket("key"); 
//如果key存在,就設置key的值為新值value 
//如果key不存在,就設置key的值為value 
keyObject.set("value"); 
  
//最后關閉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">
 
    <!-- 構造JedisConnectionFactory實例,注入池配置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>
 
    <!-- 用于緩存對象-->
    <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的主節點名稱-->
        <redisson:sentinel-servers master-name="mymaster">
            <!-- 可以配置多個 -->
            <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 鎖對象
  */
 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
//創建配置 
Config config = new Config(); 
//指定使用集群部署方式 
config.useClusterServers() 
    // 集群狀態掃描間隔時間,單位是毫秒 
    .setScanInterval(2000)  
    //cluster方式至少6個節點(3主3從,3主做sharding,3從用來保證主宕機后可以高可用) 
    .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"); 
//創建客戶端(發現這一非常耗時,基本在2秒-4秒左右) 
RedissonClient redisson = Redisson.create(config); 
  
//首先獲取redis中的key-value對象,key不存在沒關系 
RBucket<String> keyObject = redisson.getBucket("key"); 
//如果key存在,就設置key的值為新值value 
//如果key不存在,就設置key的值為value 
keyObject.set("value"); 
  
//最后關閉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 配置 -->
    <!-- 自定義的工廠類,實現了FactoryBean<JedisCluster>接口 -->
    <bean id="jedisCluster" class="com.xxxxx.JedisClusterFactory">
        <!-- address: 集群配置 -->
        <property name="address" value="${redisColony.host}"/>
        <!-- timeout: 連接超時時間 -->
        <property name="timeout" value="100000"/>
        <!-- maxRedirections: 最大重定向 -->
        <property name="maxRedirections" value="5"/>
        <!-- 連接池 -->
        <property name="genericObjectPoolConfig" ref="poolConfig"/>
    </bean>
 
    <!--redisson的實例 -->
    <redisson:client id="redissonClient">
        <redisson:cluster-servers>
            <!-- 節點地址同redis集群的節點 -->
            <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
//創建配置 
Config config = new Config(); 
//指定使用主從部署方式 
config.useMasterSlaveServers() 
    //設置redis主節點 
    .setMasterAddress("redis://127.0.0.1:6379"
    //設置redis從節點 
    .addSlaveAddress("redis://127.0.0.1:6380", "redis://127.0.0.1:6381"); 
//創建客戶端(發現這一非常耗時,基本在2秒-4秒左右) 
RedissonClient redisson = Redisson.create(config); 
  
//首先獲取redis中的key-value對象,key不存在沒關系 
RBucket<String> keyObject = redisson.getBucket("key"); 
//如果key存在,就設置key的值為新值value 
//如果key不存在,就設置key的值為value 
keyObject.set("value"); 
  
//最后關閉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>

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持服務器之家。

原文鏈接:https://blog.csdn.net/zhaochao0037/article/details/106409989

延伸 · 閱讀

精彩推薦
  • Java教程20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發項目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程Java實現搶紅包功能

    Java實現搶紅包功能

    這篇文章主要為大家詳細介紹了Java實現搶紅包功能,采用多線程模擬多人同時搶紅包,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程Java BufferWriter寫文件寫不進去或缺失數據的解決

    Java BufferWriter寫文件寫不進去或缺失數據的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進去或缺失數據的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經有好久沒有升過級了。升級完畢重啟之后,突然發現好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關于小米推送Java代碼,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

    富貴穩中求8032021-07-12
  • Java教程xml與Java對象的轉換詳解

    xml與Java對象的轉換詳解

    這篇文章主要介紹了xml與Java對象的轉換詳解的相關資料,需要的朋友可以參考下...

    Java教程網2942020-09-17
  • Java教程Java8中Stream使用的一個注意事項

    Java8中Stream使用的一個注意事項

    最近在工作中發現了對于集合操作轉換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點,所以這篇文章主要給大家介紹了關于Java8中S...

    阿杜7482021-02-04
主站蜘蛛池模板: 秋霞午夜 | 高清毛片aaaaaaaaa片 | 午夜精品网 | 我要看黄色毛片 | 婷婷中文网 | 日本大片免a费观看在线 | 日韩一区三区 | 黑人粗又长 | 免费观看无人区完整版 | 日日操天天爽 | 99在线视频免费 | 秋霞理论一级在线观看手机版 | 成人伊人青草久久综合网破解版 | 欧美一区不卡二区不卡三区 | 91香蕉国产在线观看免费永久 | 国产欧美一区二区精品性色 | 美女的让男生桶 | 亚洲欧洲日产国码无码av | 性插图动态图无遮挡 | 精品欧美日韩一区二区三区 | 好妈妈7在线观看高清 | 99pao在线视频精品免费 | 好男人资源免费播放在线观看 | 特黄特色大片免费高清视频 | 日日操天天射 | 日本孕妇与黑人xxxxxx | 成人免费播放器 | 女人pp被扒开流水了 | 成年美女黄网站色视频大全免费 | caoporen在线视频入口 | 女人和拘做受全过程免费 | 67id人成观看免费 | 免费在线电视 | 免费日批软件 | 国产精品不卡 | 91桃花 | 情趣内衣情趣玩具play | 亚洲欧洲淘宝天堂日本 | 高清毛片一区二区三区 | 色吊丝每日永久访问网站 | 欧美国产日韩在线 |