使用Spring Data Redis连接到Redis缓存



我正在尝试使用Spring Data Redis连接到Redis集群。以下是我如何配置它。

import org.springframework.data.redis.connection.RedisStandaloneConfiguration;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
@Configuration
public class RedisConfig {

@Bean
public JedisConnectionFactory jedisConnectionFactory(){
RedisStandaloneConfiguration config= new RedisStandaloneConfiguration("server",portno);
config.setPassword("password");
return new JedisConnectionFactory(config);
}
@Bean
public LettuceConnectionFactory lettuceConnectionFactory() {
RedisStandaloneConfiguration config= new RedisStandaloneConfiguration("server",portno);
config.setPassword("password");
return new LettuceConnectionFactory(config);
}
@Bean
public RedisTemplate<String, Object> redisTemplate(){
RedisTemplate<String,Object> redisTemplate=new RedisTemplate<>();
redisTemplate.setConnectionFactory(jedisConnectionFactory());
return redisTemplate;
}
}

根据文档,我将其保持得非常基本,并明确避免将其作为Pool配置。我正在尝试测试我是否正确连接,并使用下面的Service类开始redis操作。

@Service
public class RedisListCache {
private RedisTemplate<String, Object> redisTemplate;
private ListOperations<String, Object> listOperations;
public  RedisListCache(RedisTemplate<String, Object> redisTemplate){
this.redisTemplate=redisTemplate;
listOperations=redisTemplate.opsForList();
}
@PostConstruct
public void setup(){
listOperations.leftPush("keytest","Redistesting");
System.out.println(listOperations.rightPop("keytest"));
}
}

现在我无法连接到redis。在下方张贴部分日志

Caused by: io.lettuce.core.RedisCommandTimeoutException: Connection initialization timed out. Command timed out after 1 minute(s)
at io.lettuce.core.internal.ExceptionFactory.createTimeoutException(ExceptionFactory.java:71) ~[lettuce-core-6.1.9.RELEASE.jar:6.1.9.RELEASE]
at io.lettuce.core.protocol.RedisHandshakeHandler.lambda$channelRegistered$0(RedisHandshakeHandler.java:62) ~[lettuce-core-6.1.9.RELEASE.jar:6.1.9.RELEASE]
at io.netty.util.concurrent.PromiseTask.runTask(PromiseTask.java:98) ~[netty-common-4.1.70.Final.jar:4.1.70.Final]
at io.netty.util.concurrent.PromiseTask.run(PromiseTask.java:106) ~[netty-common-4.1.70.Final.jar:4.1.70.Final]
at io.netty.util.concurrent.DefaultEventExecutor.run(DefaultEventExecutor.java:66) ~[netty-common-4.1.70.Final.jar:4.1.70.Final]
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:986) ~[netty-common-4.1.70.Final.jar:4.1.70.Final]
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.70.Final.jar:4.1.70.Final]
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-common-4.1.70.Final.jar:4.1.70.Final]

我对内存中的数据存储和缓存相当陌生,所以请让我知道任何输入以使其工作。

我假设您正在使用Spring引导进行此试用。默认情况下,Spring引导使用生菜客户端。因此,您只需在application.properties/yaml中提供redis连接详细信息,并使用RedisConnectionFactory实例创建RedisTemplate Bean。

RedisConfig.java

@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory){
RedisTemplate<String,Object> redisTemplate=new RedisTemplate<>();
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new GenericToStringSerializer<Object>(Object.class));
redisTemplate.setConnectionFactory(factory);
return redisTemplate;
}
}

Application.properties:

spring.redis.database=0
spring.redis.host=localhost
spring.redis.port=6379
spring.redis.password=mypass

确保Redis服务器在上述服务器/端口中运行,并在服务层中使用redistemplatebean。

通过将ssl设置为true,将VerifyPeer设置为false,我可以使用LettuceConnectionFactory成功连接到redis。

@Bean
public LettuceConnectionFactory lettuceConnectionFactory() {
LettuceConnectionFactory lettuceConnectionFactory = new LettuceConnectionFactory();
lettuceConnectionFactory.setHostName("hostname");
lettuceConnectionFactory.setPort(port);
lettuceConnectionFactory.setPassword("yourpassword");
lettuceConnectionFactory.setUseSsl(true);
lettuceConnectionFactory.setVerifyPeer(false);
return lettuceConnectionFactory;
}

最新更新