Spring数据redis ping工作,键在那里,没有返回数据
这是我第一个使用SpringDataRedis的应用程序,我想我已经很好地理解了这些概念(我在过去多次将JdbcTemplate用于RDBMS)。下面是正在发生的事情 我已经使用JedisConnectionFactory设置了Redis模板,并且能够成功ping Redis服务器。然而,我无法从服务器上获得最简单的数据响应,而且我担心我遗漏了一些基本的信息,而到目前为止,我还无法从文档中发现这些信息 下面是我的bean.xml文件的Redis部分:Spring数据redis ping工作,键在那里,没有返回数据,spring,redis,spring-data,Spring,Redis,Spring Data,这是我第一个使用SpringDataRedis的应用程序,我想我已经很好地理解了这些概念(我在过去多次将JdbcTemplate用于RDBMS)。下面是正在发生的事情 我已经使用JedisConnectionFactory设置了Redis模板,并且能够成功ping Redis服务器。然而,我无法从服务器上获得最简单的数据响应,而且我担心我遗漏了一些基本的信息,而到目前为止,我还无法从文档中发现这些信息 下面是我的bean.xml文件的Redis部分: <!-- Redis DAO stuf
<!-- Redis DAO stuff -->
<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate" p:connection-factory-ref="jedisConnectionFactory"/>
<bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" p:host-name="${redis.url}" p:port="${redis.port}" p:database="0" />
请注意,从Redis返回的TestVal是如何为null的,但如果对该服务器的0(零)数据库使用Redis cli,则会得到以下响应:
127.0.0.1:6379> get akey
"yo mama"
“yo mama”是我期待的回报
@mp911de我在这里回复是因为回复的时间不够长,无法显示细节。 我担心,当我将代码更改为以下内容时(没有其他更改),我仍然会遇到同样的问题
注意:添加StringRedisSerializer作为RedisTemplate的默认序列化程序。感谢您的努力。
RedisOperations
用于转换为Redis数据结构值。序列化程序默认为JdkSerializationRedisSerializer
。JDK序列化程序将字符串对象转换为与ASCII或UTF-8不兼容的Java序列化表示形式。查看文档,您可能对StringRedisSerializer
感兴趣。序列化程序需要在RedisTemplate
中设置:
@Bean
RedisTemplate<String, String> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<String, String> redisTemplate = new RedisTemplate<>();
redisTemplate.setDefaultSerializer(new StringRedisSerializer());
redisTemplate.setConnectionFactory(redisConnectionFactory);
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
@Bean
RedisTemplate RedisTemplate(RedisConnectionFactory RedisConnectionFactory){
RedisTemplate RedisTemplate=新RedisTemplate();
setDefaultSerializer(新的StringRedisSerializer());
redisTemplate.setConnectionFactory(redisConnectionFactory);
redisTemplate.AfterPropertieSet();
返回模板;
}
是的,您需要一个序列化程序,以便redisTemplate返回数据。对于绝地武士,你不需要它
@Bean(name = "redisTemplate")
public RedisTemplate<String, String> redisTemplate() {
RedisTemplate<String, String> redisTemplate = new RedisTemplate<String, String>();
redisTemplate.setConnectionFactory(redisConnectionFactory());
redisTemplate.setDefaultSerializer(new StringRedisSerializer());
return redisTemplate;
}
@Bean(name=“redisTemplate”)
公共RedisTemplate RedisTemplate(){
RedisTemplate RedisTemplate=新RedisTemplate();
setConnectionFactory(redisConnectionFactory());
setDefaultSerializer(新的StringRedisSerializer());
返回模板;
}
除了@mp911de的帮助之外,我发现这也很有帮助。关键的更改似乎是在XMLBean配置文件中设置序列化程序。从那以后,他工作得很有魅力。
public String getTestVal() {
template.setDefaultSerializer(new StringRedisSerializer());
template.afterPropertiesSet();
logger.debug("getTestVal() function called++++++++++++++++++++");
template.getConnectionFactory().getConnection().select(0);
logger.debug("22222222222222");
String pingResult = template.getConnectionFactory().getConnection().ping();
logger.debug("333333333333333");
logger.debug("REDIS PING RESULT: " + pingResult);
logger.debug("444444444444444");
logger.debug("HasKey Result: " + template.hasKey("akey"));
logger.debug("555555555555555");
Object testVal = template.opsForValue().get("akey");
logger.debug("TestVal returned from REdis: " + testVal);
return null;
}
@Bean
RedisTemplate<String, String> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<String, String> redisTemplate = new RedisTemplate<>();
redisTemplate.setDefaultSerializer(new StringRedisSerializer());
redisTemplate.setConnectionFactory(redisConnectionFactory);
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
@Bean(name = "redisTemplate")
public RedisTemplate<String, String> redisTemplate() {
RedisTemplate<String, String> redisTemplate = new RedisTemplate<String, String>();
redisTemplate.setConnectionFactory(redisConnectionFactory());
redisTemplate.setDefaultSerializer(new StringRedisSerializer());
return redisTemplate;
}