缘起
最近手动配置了Redis的连接池
@Bean
public RedisTemplate<String, Object> redisTemplate() {RedisClusterConfiguration redisClusterConfiguration = new RedisClusterConfiguration();redisClusterConfiguration.setClusterNodes(Arrays.asList(new RedisNode(redisHost,port)));redisClusterConfiguration.setPassword(password);LettuceConnectionFactory lettuceConnectionFactory = new LettuceConnectionFactory(redisClusterConfiguration);RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration();redisStandaloneConfiguration.setHostName(redisHost);redisStandaloneConfiguration.setPort(port);redisStandaloneConfiguration.setPassword(password);LettuceConnectionFactory lettuceConnectionFactory = new LettuceConnectionFactory(redisStandaloneConfiguration);lettuceConnectionFactory.setDatabase(db);lettuceConnectionFactory.afterPropertiesSet();RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();redisTemplate.setConnectionFactory(lettuceConnectionFactory);Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);// 设置值(value)的序列化采用Jackson2JsonRedisSerializer。redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);// 设置键(key)的序列化采用StringRedisSerializer。redisTemplate.setKeySerializer(new StringRedisSerializer());redisTemplate.setHashKeySerializer(new StringRedisSerializer());redisTemplate.afterPropertiesSet();return redisTemplate;
}
使用时报错:
Details:[redis://***************************@xxx]: ERR This instance has cluster support disabledSuppressed: io.lettuce.core.RedisCommandExecutionException: ERR This instance has cluster support disabledat io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:147)at io.lettuce.core.internal.Exceptions.bubble(Exceptions.java:72)at io.lettuce.core.cluster.topology.DefaultClusterTopologyRefresh.getException(DefaultClusterTopologyRefresh.java:402)at io.lettuce.core.cluster.topology.DefaultClusterTopologyRefresh.tryFail(DefaultClusterTopologyRefresh.java:173)at io.lettuce.core.cluster.topology.DefaultClusterTopologyRefresh.lambda$null$9(DefaultClusterTopologyRefresh.java:150)at java.base/java.util.concurrent.CompletableFuture$UniCompose.tryFire(CompletableFuture.java:1150)at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510)at java.base/java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:2147)at io.lettuce.core.RedisChannelHandler.lambda$closeAsync$0(RedisChannelHandler.java:189)at java.base/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:863)at java.base/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:841)at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510)at java.base/java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:2147)at io.lettuce.core.internal.Futures.lambda$adapt$1(Futures.java:120)at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:590)at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:557)at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:492)at io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:636)at io.netty.util.concurrent.DefaultPromise.setSuccess0(DefaultPromise.java:625)at io.netty.util.concurrent.DefaultPromise.trySuccess(DefaultPromise.java:105)at io.netty.channel.DefaultChannelPromise.trySuccess(DefaultChannelPromise.java:84)at io.netty.channel.AbstractChannel$AbstractUnsafe.safeSetSuccess(AbstractChannel.java:990)at io.netty.channel.AbstractChannel$AbstractUnsafe.doClose0(AbstractChannel.java:756)at io.netty.channel.AbstractChannel$AbstractUnsafe.close(AbstractChannel.java:731)at io.netty.channel.AbstractChannel$AbstractUnsafe.close(AbstractChannel.java:620)at io.netty.channel.DefaultChannelPipeline$HeadContext.close(DefaultChannelPipeline.java:1352)at io.netty.channel.AbstractChannelHandlerContext.invokeClose(AbstractChannelHandlerContext.java:749)at io.netty.channel.AbstractChannelHandlerContext.access$1200(AbstractChannelHandlerContext.java:61)at io.netty.channel.AbstractChannelHandlerContext$11.run(AbstractChannelHandlerContext.java:732)at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:174)at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:167)at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:470)at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:569)at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997)at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)at java.base/java.lang.Thread.run(Thread.java:833)Caused by: io.lettuce.core.RedisCommandExecutionException: ERR This instance has cluster support disabledat io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:147)at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116)at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120)at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111)at io.lettuce.core.cluster.topology.TimedAsyncCommand.complete(TimedAsyncCommand.java:52)at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:747)at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:682)at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:599)at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442)at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440)at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166)at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:788)at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724)at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650)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即可
@Bean
public RedisTemplate<String, Object> redisTemplate() {RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration();redisStandaloneConfiguration.setHostName(redisHost);redisStandaloneConfiguration.setPort(port);redisStandaloneConfiguration.setPassword(password);LettuceConnectionFactory lettuceConnectionFactory = new LettuceConnectionFactory(redisStandaloneConfiguration);lettuceConnectionFactory.setDatabase(db);lettuceConnectionFactory.afterPropertiesSet();RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();redisTemplate.setConnectionFactory(lettuceConnectionFactory);Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);// 设置值(value)的序列化采用Jackson2JsonRedisSerializer。redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);// 设置键(key)的序列化采用StringRedisSerializer。redisTemplate.setKeySerializer(new StringRedisSerializer());redisTemplate.setHashKeySerializer(new StringRedisSerializer());redisTemplate.afterPropertiesSet();return redisTemplate;
}