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拿过来了其实是不一样的
报错如下:
原因 就是说配置不对 参数不正确
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>
相关推荐
"redis_cluster.tar.gz" 文件应该包含的是关于 Redis 集群配置的相关资料。 集群配置主要涉及以下几个核心概念: 1. **节点分布**:Redis 集群由多个节点组成,每个节点都存储一部分数据,并且通过 gossip 协议...
基于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是Redis官方提供的分布式解决方案,它通过将数据分片(sharding)到多个节点来实现高可用性和可扩展性。在本实战栗子中,我们将深入探讨如何搭建Redis Cluster,学习其基本概念、操作指令以及如何处理...
在提供的文档`openstack heat部署redis_cluster.docx`中,应该包含了详细的步骤和配置示例,包括如何编写和使用Heat模板,以及如何执行集群的验证测试。这个文档将是实施上述过程的关键参考。 总之,通过OpenStack ...
在本项目"redis_cluster_simple.zip"中,我们探讨的是如何使用Spring Boot来配置和操作一个Redis集群。Redis是一个高性能的键值存储系统,常用于数据库、缓存和消息中间件等场景。Spring Boot则简化了Java应用的初始...
这份"redis_cluster离线安装包及其安装手册"包含了所有必要的依赖包和软件,确保了即使在没有网络的情况下也能顺利完成安装过程。 首先,我们需要了解Redis Cluster的基本概念。Redis Cluster采用无中心架构,每个...
linux环境下载后直接运行脚本可一次性完成解压安装部署集群等。_redis_cluster_auto
大数据与云计算培训学习资料 Redis_Cluster 共17页.pptx
Linux服务器上安装Web相关环境、Zookeeper集群、Redis_Cluster集群、LVS_web-install-linux
解压后,通常会得到一个可执行文件(例如:`redis_exporter` 或 `redis_exporter.exe`,具体取决于你的操作系统)。 在运行 `redis_exporter` 之前,确保你的 Redis 服务已经正常启动并且可以访问。`redis_exporter...
这个压缩包 "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 python 安装whl
Redis 是一个开源的、基于键值对...通过以上步骤,你将在Mac上成功安装Redis客户端,并了解如何在iOS应用中集成和使用Redis。不断学习和理解Redis的高级特性,如Lua脚本、事务、流等,将有助于提升你的应用性能和功能。
Docker-compose: docker官方编排项目之一,负责快速部署分布式应用 Docker-compose.yml:redis-cluster集群redis节点初始化文件 ...Redis.conf:redis客户端 Redis-trib-latest.tar.gz:redis-cluster管理工具
集群(Cluster)功能是Redis为实现水平扩展而设计的一种分布式解决方案,它允许多个节点间的数据分片,以支持更大的数据量和更高的并发性。下面将详细介绍Redis集群搭建实战中的关键知识点。 1. **集群基础概念** ...
Docker redis集群自动化部署脚本 Docker redis集群自动化部署脚本
这个压缩包 "redis_exporter-v1.1.1.linux-arm64.tar.gz" 包含了适用于 Linux ARM64 架构的 Redis Exporter 版本 1.1.1。 Redis 是一个高性能的键值数据库,广泛应用于缓存、消息队列等多种场景。然而,为了确保 ...
4. 集群模式下,配置Redis Sentinel或Redis Cluster,确保高可用性和数据一致性。 四、Redis集群的构建与使用 1. Redis Cluster是Redis的分布式解决方案,通过数据分片实现水平扩展。 2. 配置多个节点,每个节点都...
本示例“redis_distribute_lock.rar”是关于如何利用Redis来实现分布式锁的一个实际应用,它结合了Spring Boot框架,以演示在多线程环境下如何确保库存扣减操作的正确性。 首先,我们需要了解Redis。Redis是一款高...