`
TableMiao
  • 浏览: 75574 次
  • 性别: 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
分享到:
评论

相关推荐

    redis_cluster.tar.gz

    "redis_cluster.tar.gz" 文件应该包含的是关于 Redis 集群配置的相关资料。 集群配置主要涉及以下几个核心概念: 1. **节点分布**:Redis 集群由多个节点组成,每个节点都存储一部分数据,并且通过 gossip 协议...

    基于acl库封装c\c++ 的redis-client客户端源码

    基于acl库封装的redis client vs2010工程; 运行时解压到: redis-acl\lib_acl_cpp\samples\redis路径下,把lib_acl_vc2010d.lib、lib_acl_cpp_vc2010d.lib放到 \redis-acl\lib_acl_cpp\samples\redis\redisclient...

    redis_cluster实战栗子.rar

    Redis Cluster是Redis官方提供的分布式解决方案,它通过将数据分片(sharding)到多个节点来实现高可用性和可扩展性。在本实战栗子中,我们将深入探讨如何搭建Redis Cluster,学习其基本概念、操作指令以及如何处理...

    openstack heat部署redis_cluster.rar_RRQ_cluster_openstack

    在提供的文档`openstack heat部署redis_cluster.docx`中,应该包含了详细的步骤和配置示例,包括如何编写和使用Heat模板,以及如何执行集群的验证测试。这个文档将是实施上述过程的关键参考。 总之,通过OpenStack ...

    redis_cluster_simple.zip

    在本项目"redis_cluster_simple.zip"中,我们探讨的是如何使用Spring Boot来配置和操作一个Redis集群。Redis是一个高性能的键值存储系统,常用于数据库、缓存和消息中间件等场景。Spring Boot则简化了Java应用的初始...

    redis_cluster离线安装包及其安装手册

    这份"redis_cluster离线安装包及其安装手册"包含了所有必要的依赖包和软件,确保了即使在没有网络的情况下也能顺利完成安装过程。 首先,我们需要了解Redis Cluster的基本概念。Redis Cluster采用无中心架构,每个...

    linux环境下载后直接运行脚本可一次性完成解压安装部署集群等。_redis_cluster_auto.zip

    linux环境下载后直接运行脚本可一次性完成解压安装部署集群等。_redis_cluster_auto

    大数据与云计算培训学习资料 Redis_Cluster 共17页.pptx

    大数据与云计算培训学习资料 Redis_Cluster 共17页.pptx

    Linux服务器上安装Web相关环境、Zookeeper集群、Redis_Cluster集群

    Linux服务器上安装Web相关环境、Zookeeper集群、Redis_Cluster集群、LVS_web-install-linux

    prometheus redis_exporter

    解压后,通常会得到一个可执行文件(例如:`redis_exporter` 或 `redis_exporter.exe`,具体取决于你的操作系统)。 在运行 `redis_exporter` 之前,确保你的 Redis 服务已经正常启动并且可以访问。`redis_exporter...

    redis_exporter-v0.13.linux-amd64.tar.gz

    这个压缩包 "redis_exporter-v0.13.linux-amd64.tar.gz" 包含了适用于 Linux 操作系统(AMD64 架构)的 v0.13 版本的 Redis Exporter 实现。它允许用户通过 Prometheus 监控系统收集 Redis 的关键数据,以确保数据库...

    redis_py_cluster-1.3.4-py2.py3-none-any

    redis_py_cluster-1.3.4-py2.py3-none-any, redis python 安装whl

    redis_ios_安装客户端

    Redis 是一个开源的、基于键值对...通过以上步骤,你将在Mac上成功安装Redis客户端,并了解如何在iOS应用中集成和使用Redis。不断学习和理解Redis的高级特性,如Lua脚本、事务、流等,将有助于提升你的应用性能和功能。

    redis-cluster.zip

    Docker-compose: docker官方编排项目之一,负责快速部署分布式应用 Docker-compose.yml:redis-cluster集群redis节点初始化文件 ...Redis.conf:redis客户端 Redis-trib-latest.tar.gz:redis-cluster管理工具

    redis_cluster.zip

    集群(Cluster)功能是Redis为实现水平扩展而设计的一种分布式解决方案,它允许多个节点间的数据分片,以支持更大的数据量和更高的并发性。下面将详细介绍Redis集群搭建实战中的关键知识点。 1. **集群基础概念** ...

    build_redis_cluster.sh

    Docker redis集群自动化部署脚本 Docker redis集群自动化部署脚本

    redis_exporter-v1.1.1.linux-arm64.tar.gz

    这个压缩包 "redis_exporter-v1.1.1.linux-arm64.tar.gz" 包含了适用于 Linux ARM64 架构的 Redis Exporter 版本 1.1.1。 Redis 是一个高性能的键值数据库,广泛应用于缓存、消息队列等多种场景。然而,为了确保 ...

    shiro-redis-cluster

    4. 集群模式下,配置Redis Sentinel或Redis Cluster,确保高可用性和数据一致性。 四、Redis集群的构建与使用 1. Redis Cluster是Redis的分布式解决方案,通过数据分片实现水平扩展。 2. 配置多个节点,每个节点都...

    redis_distribute_lock.rar

    本示例“redis_distribute_lock.rar”是关于如何利用Redis来实现分布式锁的一个实际应用,它结合了Spring Boot框架,以演示在多线程环境下如何确保库存扣减操作的正确性。 首先,我们需要了解Redis。Redis是一款高...

Global site tag (gtag.js) - Google Analytics