缘起
最近手动配置了Redis的连接池
1@Bean 2public RedisTemplate<String, Object> redisTemplate() { 3 RedisClusterConfiguration redisClusterConfiguration = new RedisClusterConfiguration(); 4 redisClusterConfiguration.setClusterNodes(Arrays.asList(new RedisNode(redisHost,port))); 5 redisClusterConfiguration.setPassword(password); 6 LettuceConnectionFactory lettuceConnectionFactory = new LettuceConnectionFactory(redisClusterConfiguration); 7 RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration(); 8 redisStandaloneConfiguration.setHostName(redisHost); 9 redisStandaloneConfiguration.setPort(port); 10 redisStandaloneConfiguration.setPassword(password); 11 LettuceConnectionFactory lettuceConnectionFactory = new LettuceConnectionFactory(redisStandaloneConfiguration); 12 lettuceConnectionFactory.setDatabase(db); 13 lettuceConnectionFactory.afterPropertiesSet(); 14 RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>(); 15 redisTemplate.setConnectionFactory(lettuceConnectionFactory); 16 Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class); 17 // 设置值(value)的序列化采用Jackson2JsonRedisSerializer。 18 redisTemplate.setValueSerializer(jackson2JsonRedisSerializer); 19 // 设置键(key)的序列化采用StringRedisSerializer。 20 redisTemplate.setKeySerializer(new StringRedisSerializer()); 21 redisTemplate.setHashKeySerializer(new StringRedisSerializer()); 22 redisTemplate.afterPropertiesSet(); 23 return redisTemplate; 24}
使用时报错:
1Details: 2 [redis://***************************@xxx]: ERR This instance has cluster support disabled 3 4 Suppressed: io.lettuce.core.RedisCommandExecutionException: 5 at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:147) 6 at io.lettuce.core.internal.Exceptions.bubble(Exceptions.java:72) 7 at io.lettuce.core.cluster.topology.DefaultClusterTopologyRefresh.getException(DefaultClusterTopologyRefresh.java:402) 8 at io.lettuce.core.cluster.topology.DefaultClusterTopologyRefresh.tryFail(DefaultClusterTopologyRefresh.java:173) 9 at io.lettuce.core.cluster.topology.DefaultClusterTopologyRefresh.lambda$null$9(DefaultClusterTopologyRefresh.java:150) 10 at java.base/java.util.concurrent.CompletableFuture$UniCompose.tryFire(CompletableFuture.java:1150) 11 at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510) 12 at java.base/java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:2147) 13 at io.lettuce.core.RedisChannelHandler.lambda$closeAsync$0(RedisChannelHandler.java:189) 14 at java.base/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:863) 15 at java.base/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:841) 16 at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510) 17 at java.base/java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:2147) 18 at io.lettuce.core.internal.Futures.lambda$adapt$1(Futures.java:120) 19 at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:590) 20 at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:557) 21 at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:492) 22 at io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:636) 23 at io.netty.util.concurrent.DefaultPromise.setSuccess0(DefaultPromise.java:625) 24 at io.netty.util.concurrent.DefaultPromise.trySuccess(DefaultPromise.java:105) 25 at io.netty.channel.DefaultChannelPromise.trySuccess(DefaultChannelPromise.java:84) 26 at io.netty.channel.AbstractChannel$AbstractUnsafe.safeSetSuccess(AbstractChannel.java:990) 27 at io.netty.channel.AbstractChannel$AbstractUnsafe.doClose0(AbstractChannel.java:756) 28 at io.netty.channel.AbstractChannel$AbstractUnsafe.close(AbstractChannel.java:731) 29 at io.netty.channel.AbstractChannel$AbstractUnsafe.close(AbstractChannel.java:620) 30 at io.netty.channel.DefaultChannelPipeline$HeadContext.close(DefaultChannelPipeline.java:1352) 31 at io.netty.channel.AbstractChannelHandlerContext.invokeClose(AbstractChannelHandlerContext.java:749) 32 at io.netty.channel.AbstractChannelHandlerContext.access$1200(AbstractChannelHandlerContext.java:61) 33 at io.netty.channel.AbstractChannelHandlerContext$11.run(AbstractChannelHandlerContext.java:732) 34 at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:174) 35 at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:167) 36 at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:470) 37 at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:569) 38 at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) 39 at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) 40 at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) 41 at java.base/java.lang.Thread.run(Thread.java:833) 42 Caused by: io.lettuce.core.RedisCommandExecutionException: 43 at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:147) 44 at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) 45 at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) 46 at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) 47 at io.lettuce.core.cluster.topology.TimedAsyncCommand.complete(TimedAsyncCommand.java:52) 48 at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:747) 49 at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:682) 50 at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:599) 51 at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) 52 at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) 53 at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) 54 at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) 55 at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) 56 at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) 57 at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) 58 at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) 59 at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:788) 60 at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724) 61 at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650) 62 at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562)
修改RedisServer配置解决
提示语ERR This instance has cluster support disabled说明RedisServer不支持集群,网上很多文章都是修改Server配置重启解决此问题的,这不再赘述
修改RedisClient配置解决
我没公司RedisServer权限,公司的RedisServer不是集群部署,就是单个,那就只能从配置上修改一下了,Configuration从Cluster变成Standalone即可
1@Bean 2public RedisTemplate<String, Object> redisTemplate() { 3 4 RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration(); 5 redisStandaloneConfiguration.setHostName(redisHost); 6 redisStandaloneConfiguration.setPort(port); 7 redisStandaloneConfiguration.setPassword(password); 8 LettuceConnectionFactory lettuceConnectionFactory = new LettuceConnectionFactory(redisStandaloneConfiguration); 9 lettuceConnectionFactory.setDatabase(db); 10 lettuceConnectionFactory.afterPropertiesSet(); 11 12 RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>(); 13 redisTemplate.setConnectionFactory(lettuceConnectionFactory); 14 Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class); 15 // 设置值(value)的序列化采用Jackson2JsonRedisSerializer。 16 redisTemplate.setValueSerializer(jackson2JsonRedisSerializer); 17 // 设置键(key)的序列化采用StringRedisSerializer。 18 redisTemplate.setKeySerializer(new StringRedisSerializer()); 19 redisTemplate.setHashKeySerializer(new StringRedisSerializer()); 20 21 redisTemplate.afterPropertiesSet(); 22 return redisTemplate; 23}