`
TableMiao
  • 浏览: 74043 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

redis_cluster客户端集成排错经历

阅读更多

redis_cluster客户端集成排错经历

   好久没弄,忘得差不多了,记一下,前提不表!


1.单台redis客户端引用

        从别的项目中扣过来一配置文件,发现只有spring-data-redis 的应用实例,没有jedis,果断加入,很简单网上很多列子。

     附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:cache="http://www.springframework.org/schema/cache"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="
		   http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-3.0.xsd
           http://www.springframework.org/schema/tx
           http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
           http://www.springframework.org/schema/aop
           http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
           http://www.springframework.org/schema/cache
           http://www.springframework.org/schema/cache/spring-cache.xsd">

	<!-- JedisConnectionFactory -->
	<bean id="stringJedisConnectionFactory"
		class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"
		destroy-method="destroy" p:host-name="${qrpay.redis.host}"
		p:port="${qrpay.redis.port}" p:timeout="${qrpay.redis.timeout}"
		p:usePool="${qrpay.redis.usePool}"
		p:password="${qrpay.redis.password}">
		<constructor-arg index="0" ref="stringJedisPoolConfig" />
	</bean>

	<!-- JedisPoolConfig -->
	<bean id="stringJedisPoolConfig"
		class="redis.clients.jedis.JedisPoolConfig">
		<property name="maxTotal" value="${qrpay.redis.maxTotal}" />
		<property name="maxIdle" value="${qrpay.redis.maxIdle}" />
		<property name="minIdle" value="${qrpay.redis.minIdle}" />
		<property name="maxWaitMillis"
			value="${qrpay.redis.maxWaitMillis}" />
		<property name="testOnBorrow"
			value="${qrpay.redis.testOnBorrow}" />
		<property name="softMinEvictableIdleTimeMillis" value="500" />
		<property name="timeBetweenEvictionRunsMillis" value="1000" />
	</bean>

	<!-- StringRedisTemplate 实例 -->
	<bean id="stringRedisTemplate"
		class="org.springframework.data.redis.core.StringRedisTemplate"
		p:connection-factory-ref="stringJedisConnectionFactory"
		p:enableTransactionSupport="false" />

	<!-- jedisPool 实例 -->
	<bean id="jedisPool" class="redis.clients.jedis.JedisPool">
		<constructor-arg name="poolConfig"
			ref="stringJedisPoolConfig" />
		<constructor-arg name="host"
			value="${qrpay.redis.host}" />
		<constructor-arg name="port"
			value="${qrpay.redis.port}" type="int" />
		<constructor-arg name="timeout"
			value="${qrpay.redis.timeout}" type="int" />
		<constructor-arg name="password"
			value="${qrpay.redis.password}" />
	</bean>

</beans>

 

 

2.redis_cluster客户端引用

   A:   spring-data-redis 实例引用

     坑1:

        项目中用的版本是  1.6.0.RELEASE

    

<dependency>
      <groupId>org.springframework.data</groupId>
      <artifactId>spring-data-redis</artifactId>
      <version>1.6.0.RELEASE</version>
</dependency>

    报错如下:

 

        

 

 

   原因 spring-data-redis 1.7以上的版本才支持 RedisCluster

 

     坑2:  

         换版本 换成1.7.0.RELEASE  

 

 
 

     原因 报错很明显了 不支持设了密码的RedisCluster

 

     最终解决  版本换成 1.8.0.RELEASE

 

   B:  jedisCluster 实例引用

 

     坑1:

         由于是扣过来的配置文件,里面本身只有 spring-data-redis 的集成,自己加的jedisCluster配置,直接把 配置cluster机器的6个节点的ip、port拿过来了其实是不一样的

报错如下: 



 

 

        原因 就是说配置不对 参数不正确

 

xml配置:
       spring-data-redis 节点配置

 

       jedisCluster 节点配置

 

原因

       spring-data-redis 是 org.springframework.data.redis.connection.RedisClusterNode

       jedisCluster 是 redis.clients.jedis.HostAndPort

对应配置改回来就对了

 

坑 2:

   在配置的密码的集群没有设置密码会报

   redis.clients.jedis.exceptions.JedisDataException: NOAUTH Authentication required.

       

   解决办法

     1.jedis2.9版本之前的 需要手工重写jedis源码,把认证加进去

        详见 大神帖子 https://www.cnblogs.com/snowstar123/p/5696052.html

     

     2.更新jedis的版本 到2.9  支持密码配置

      点到JedisCluster中看 有构造函数 支持

   xml中对应配置即可

 

    附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"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd">

	<!-- 1.配置ConnectionFactory -->
	<bean id="jedisConnectionFactory"
		class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"
		destroy-method="destroy" p:password="${qrpay.redis.cluster.password}">
		<constructor-arg name="clusterConfig"
			ref="redisClusterConfiguration" />
		<constructor-arg name="poolConfig"
			ref="jedisPoolConfig" />
	</bean>
	<!-- 2.配置JedisPoolConfig -->
	<bean id="jedisPoolConfig"
		class="redis.clients.jedis.JedisPoolConfig">
		<property name="minIdle"
			value="${qrpay.redis.cluster.minIdle}" />
		<property name="maxIdle"
			value="${qrpay.redis.cluster.maxIdle}" />
		<property name="maxTotal"
			value="${qrpay.redis.cluster.maxActive}" />
		<property name="maxWaitMillis"
			value="${qrpay.redis.cluster.maxWait}" />
		<property name="testOnBorrow"
			value="${qrpay.redis.cluster.testOnBorrow}" />
		<property name="testOnReturn" value="true" />
		<property name="testWhileIdle" value="true" />
	</bean>
	<!-- 3.配置RedisClusterConfiguration -->
	<bean id="redisClusterConfiguration"
		class="org.springframework.data.redis.connection.RedisClusterConfiguration">
		<property name="clusterNodes">
			<set>
				<bean name="node1"
					class="org.springframework.data.redis.connection.RedisClusterNode">
					<constructor-arg name="host"
						value="${qrpay.redis.cluster.host1}" />
					<constructor-arg name="port"
						value="${qrpay.redis.cluster.port1}" />
				</bean>
				<bean name="node2"
					class="org.springframework.data.redis.connection.RedisClusterNode">
					<constructor-arg name="host"
						value="${qrpay.redis.cluster.host2}" />
					<constructor-arg name="port"
						value="${qrpay.redis.cluster.port2}" />
				</bean>
				<bean name="node3"
					class="org.springframework.data.redis.connection.RedisClusterNode">
					<constructor-arg name="host"
						value="${qrpay.redis.cluster.host3}" />
					<constructor-arg name="port"
						value="${qrpay.redis.cluster.port3}" />
				</bean>
				<bean name="node4"
					class="org.springframework.data.redis.connection.RedisClusterNode">
					<constructor-arg name="host"
						value="${qrpay.redis.cluster.host4}" />
					<constructor-arg name="port"
						value="${qrpay.redis.cluster.port4}" />
				</bean>
				<bean name="node5"
					class="org.springframework.data.redis.connection.RedisClusterNode">
					<constructor-arg name="host"
						value="${qrpay.redis.cluster.host5}" />
					<constructor-arg name="port"
						value="${qrpay.redis.cluster.port5}" />
				</bean>
				<bean name="node6"
					class="org.springframework.data.redis.connection.RedisClusterNode">
					<constructor-arg name="host"
						value="${qrpay.redis.cluster.host6}" />
					<constructor-arg name="port"
						value="${qrpay.redis.cluster.port6}" />
				</bean>
			</set>
		</property>
	</bean>

	<!-- 4.配置stringRedisTemplate -->
	<bean id="stringRedisTemplate"
		class="org.springframework.data.redis.core.StringRedisTemplate">
		<property name="defaultSerializer"
			ref="jdkSerializationRedisSerializer" />
		<property name="connectionFactory"
			ref="jedisConnectionFactory" />
	</bean>

	<!-- 5.配置jdkSerializationRedisSerializer -->
	<bean id="jdkSerializationRedisSerializer"
		class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer">
	</bean>


	<!-- jedisCluster -->
	<bean id="jedisCluster" class="redis.clients.jedis.JedisCluster">
		<constructor-arg name="nodes">
			<set>
				<bean name="node1" class="redis.clients.jedis.HostAndPort">
					<constructor-arg name="host"
						value="${qrpay.redis.cluster.host1}" />
					<constructor-arg name="port"
						value="${qrpay.redis.cluster.port1}" />
				</bean>
				<bean name="node2" class="redis.clients.jedis.HostAndPort">
					<constructor-arg name="host"
						value="${qrpay.redis.cluster.host2}" />
					<constructor-arg name="port"
						value="${qrpay.redis.cluster.port2}" />
				</bean>
				<bean name="node3" class="redis.clients.jedis.HostAndPort">
					<constructor-arg name="host"
						value="${qrpay.redis.cluster.host3}" />
					<constructor-arg name="port"
						value="${qrpay.redis.cluster.port3}" />
				</bean>
				<bean name="node4" class="redis.clients.jedis.HostAndPort">
					<constructor-arg name="host"
						value="${qrpay.redis.cluster.host4}" />
					<constructor-arg name="port"
						value="${qrpay.redis.cluster.port4}" />
				</bean>
				<bean name="node5" class="redis.clients.jedis.HostAndPort">
					<constructor-arg name="host"
						value="${qrpay.redis.cluster.host5}" />
					<constructor-arg name="port"
						value="${qrpay.redis.cluster.port5}" />
				</bean>
				<bean name="node6" class="redis.clients.jedis.HostAndPort">
					<constructor-arg name="host"
						value="${qrpay.redis.cluster.host6}" />
					<constructor-arg name="port"
						value="${qrpay.redis.cluster.port6}" />
				</bean>

			</set>
		</constructor-arg>
		<constructor-arg index="1"
			value="${qrpay.redis.cluster.timeout}"></constructor-arg>
		<constructor-arg index="2" value="2000"></constructor-arg>
		<constructor-arg index="3" value="50"></constructor-arg>
		<constructor-arg index="4"
			value="${qrpay.redis.cluster.password}"></constructor-arg>
		<constructor-arg index="5" ref="jedisPoolConfig"></constructor-arg>
	</bean>
</beans>

 

 

 

 

 

  • 大小: 23.2 KB
  • 大小: 26 KB
  • 大小: 16.1 KB
  • 大小: 4.6 KB
  • 大小: 22.8 KB
  • 大小: 21 KB
  • 大小: 17.5 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics