spring整合redis(集群、主从)及集群异常处理

9 篇文章 0 订阅
3 篇文章 0 订阅

部分转自:https://blog.csdn.net/sunqingzhong44/article/details/70976038?locationNum=6&fps=1

pom.xml文件:

注:若spring-data-redis版本过低,在spring中配置时有些类会没用

        <!-- redis begin -->
		<dependency>
			<groupId>redis.clients</groupId>
			<artifactId>jedis</artifactId>
			<version>2.9.0</version>
		</dependency>

        <!-- spring-redis实现 -->
		<dependency>
			<groupId>org.springframework.data</groupId>
			<artifactId>spring-data-redis</artifactId>
			<version>1.7.5.RELEASE</version>
		</dependency>

redis集群主要配置:

redis-cluster.properties

redis.host1=192.168.1.235
redis.port1=7001
redis.host2=192.168.1.235
redis.port2=7002
redis.host3=192.168.1.235
redis.port3=7003
redis.host4=192.168.1.235
redis.port4=7004
redis.host5=192.168.1.235
redis.port5=7005
redis.host6=192.168.1.235
redis.port6=7006
 
#有多少个redis就设置多少
redis.maxRedirects=6
redis.maxIdle=30
redis.maxTotal=100
redis.minIdle=5
redis.maxWaitMillis=30000 
redis.testOnBorrow=true
redis.testOnReturn=true 
redis.testWhileIdle=true
redis.timeout=3000

redis-cluster.xml

<?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:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans  
                            http://www.springframework.org/schema/beans/spring-beans-4.0.xsd  
                            http://www.springframework.org/schema/tx 
                            http://www.springframework.org/schema/tx/spring-tx-4.0.xsd  
                            http://www.springframework.org/schema/context  
                            http://www.springframework.org/schema/context/spring-context-4.0.xsd  
                            http://www.springframework.org/schema/mvc  
                            http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
  
		 <bean id="redisClusterConfiguration" class="org.springframework.data.redis.connection.RedisClusterConfiguration">  
				<property name="maxRedirects" value="${redis.maxRedirects}"></property>  
				<property name="clusterNodes">  
					<set>  
						<bean class="org.springframework.data.redis.connection.RedisNode">  
							<constructor-arg name="host" value="${redis.host1}"></constructor-arg>  
							<constructor-arg name="port" value="${redis.port1}"></constructor-arg>  
						</bean>  
						<bean class="org.springframework.data.redis.connection.RedisNode">  
							<constructor-arg name="host" value="${redis.host2}"></constructor-arg>  
							<constructor-arg name="port" value="${redis.port2}"></constructor-arg>  
						</bean>  
						<bean class="org.springframework.data.redis.connection.RedisNode">  
							<constructor-arg name="host" value="${redis.host3}"></constructor-arg>  
							<constructor-arg name="port" value="${redis.port3}"></constructor-arg>  
						</bean>  
						<bean class="org.springframework.data.redis.connection.RedisNode">  
							<constructor-arg name="host" value="${redis.host4}"></constructor-arg>  
							<constructor-arg name="port" value="${redis.port4}"></constructor-arg>  
						</bean>  
						<bean class="org.springframework.data.redis.connection.RedisNode">  
							<constructor-arg name="host" value="${redis.host5}"></constructor-arg>  
							<constructor-arg name="port" value="${redis.port5}"></constructor-arg>  
						</bean>  
						<bean class="org.springframework.data.redis.connection.RedisNode">  
							<constructor-arg name="host" value="${redis.host6}"></constructor-arg>  
							<constructor-arg name="port" value="${redis.port6}"></constructor-arg>  
						</bean>  
				</set>  
		</property>  
	</bean>  
	
	
	<bean id="jedisPoolConfig"   class="redis.clients.jedis.JedisPoolConfig">  
		<property name="maxTotal" value="${redis.maxTotal}" />
        <property name="maxIdle" value="${redis.maxIdle}" />
        <property name="maxWaitMillis" value="${redis.maxWaitMillis}" />
        <property name="testOnBorrow" value="${redis.testOnBorrow}" />
    </bean>  
	   
	<bean id="jeidsConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"  >  
		 <constructor-arg name="clusterConfig" ref="redisClusterConfiguration"/>  
         <constructor-arg name="poolConfig" ref="jedisPoolConfig"/>   
	</bean>  
	  
	<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">  
		<property name="connectionFactory" ref="jeidsConnectionFactory" />
		 <property name="keySerializer" >  
            <bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />  
        </property>  
        <property name="valueSerializer" >  
            <bean class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer" />  
        </property>  
        <property name="hashKeySerializer">  
            <bean class="org.springframework.data.redis.serializer.StringRedisSerializer"/>  
        </property>  
        <property name="hashValueSerializer">  
            <bean class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer"/>  
        </property>  
	</bean>   
	    
  </beans>

redis 主从配置

redis-ms.properties

# Redis settings  
#sentinel1的IP和端口  
sentinel1.host=192.168.1.233
sentinel1.port=26379  
#sentinel2的IP和端口  
sentinel2.host=192.168.1.233
sentinel2.port=26378 
 
im.hs.server.redis.maxIdle=500  
#最大连接数,超过此连接时操作redis会报错  
im.hs.server.redis.maxTotal=5000  
im.hs.server.redis.maxWaitTime=1000  
im.hs.server.redis.testOnBorrow=true  
#最小闲置连接数,spring启动的时候自动建立该数目的连接供应用程序使用,不够的时候会申请。  
im.hs.server.redis.minIdle=300
im.hs.server.redis.sentinel.masterName=mymaster

redis-ms.xml

<?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:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans  
                            http://www.springframework.org/schema/beans/spring-beans-4.0.xsd  
                            http://www.springframework.org/schema/tx 
                            http://www.springframework.org/schema/tx/spring-tx-4.0.xsd  
                            http://www.springframework.org/schema/context  
                            http://www.springframework.org/schema/context/spring-context-4.0.xsd  
                            http://www.springframework.org/schema/mvc  
                            http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
  
  
  
         <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">  
		        <property name="maxTotal" value="${im.hs.server.redis.maxTotal}" />  
		        <property name="minIdle" value="${im.hs.server.redis.minIdle}" />  
		        <property name="maxWaitMillis" value="${im.hs.server.redis.maxWaitTime}" />  
		        <property name="maxIdle" value="${im.hs.server.redis.maxIdle}" />  
		        <property name="testOnBorrow" value="${im.hs.server.redis.testOnBorrow}" />  
		        <property name="testOnReturn" value="true" />  
		        <property name="testWhileIdle" value="true" />  
   		 </bean> 
   		  
		<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="${im.hs.server.redis.sentinel.masterName}"/>
		        </bean>
    		</property>
		    <property name="sentinels">
		        <set>
		            <bean class="org.springframework.data.redis.connection.RedisNode">
		                <constructor-arg name="host" value="${sentinel1.host}"></constructor-arg>
		
		                <constructor-arg name="port" value="${sentinel1.port}"></constructor-arg>
		            </bean>
		            <bean class="org.springframework.data.redis.connection.RedisNode">
		                <constructor-arg name="host" value="${sentinel2.host}"></constructor-arg>
		
		                <constructor-arg name="port" value="${sentinel2.port}"></constructor-arg>
		            </bean>
		        </set>
		    </property>
	    </bean>
 
		<bean id="jeidsConnectionFactory"
			class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
		    	  <constructor-arg name="sentinelConfig" ref="redisSentinelConfiguration"></constructor-arg>  
        <constructor-arg name="poolConfig" ref="poolConfig"></constructor-arg>  	
		</bean>
 
 
		<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
		    <property name="connectionFactory" ref="jeidsConnectionFactory"/>
		</bean>
	    
</beans>

使用:

@Service
@Transactional(readOnly=true)
public class UserServiceImpl implements UserService {
	
	@Autowired
	private UserDao userDao;
	@Autowired
	private RedisTemplate<String, Object> redisTemplate;
	
	@Override
	@Transactional(readOnly=false)
	public void add(final User user) {
		// TODO Auto-generated method stub
		userDao.save(user);
		System.out.println("--------------添加redis缓存---------------------------");
		
 
		redisTemplate.execute(new RedisCallback<Object>() {  
            @Override  
            public Object doInRedis(RedisConnection connection)  
                    throws DataAccessException {  
                connection.hSet(redisTemplate.getStringSerializer().serialize("SYS_USER_TAB"),
                        redisTemplate.getStringSerializer().serialize("USER_"+user.getId()),  
                        redisTemplate.getStringSerializer().serialize(JSONObject.toJSONString(user)));  
              System.out.println(redisTemplate.getStringSerializer().serialize("USER_"+user.getId()));
                return null;  
            }  
        });  
		
		
		
	}
 
}

 异常处理:

1.Caused by: java.lang.NumberFormatException: For input string: "7006@17006"

 解决办法:将redis的jar包改为2.9.0即可

2.(error) MOVED 11469 192.168.163.249:7002

 解决办法:配置redis集群,单个redis无法存值

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值