我最近从ehCache切换到Redis并且在redis缓存中,我注意到第一次获取引用数据实体返回null并且永远不会从实际数据库表中检索。以下是我的示例实体
@RedisHash("SomeType")
public class SomeType implements java.io.Serializable {
private String someTypeCd;
private String someName;
@Id
@org.springframework.data.annotation.Id
@Column(name="SOME_TYPE_CD", unique=true, nullable=false, length=32)
public String getSomeTypeCd() {
return this.someTypeCd;
}
public void setSomeTypeCd(String someTypeCd) {
this.someTypeCd = someTypeCd;
}
@Column(name="SOME_NAME", nullable=false, length=64)
public String getSomeName() {
return this.someName;
}
public void setSomeName(String someName) {
this.someName = someName;
}
}
此处SomeType表的值通过DML存储,并且不会从代码中保存此参考数据表的任何行。因此Redis Cache最初没有实体值
当我使用以下代码从实体获取时
SomeType someType = someTypeRepository.findOne(someName);
我总是得到一个null。而如果缓存没有条目,我希望这可以查询数据库。
以下是我的maven依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.6.RELEASE</version>
</parent>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<version>1.8.13.RELEASE</version>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
<type>jar</type>
</dependency>
我的Jedis配置如下
@Configuration
@EnableRedisRepositories
public class JedisConfig {
@Bean
JedisConnectionFactory jedisConnectionFactory() {
return new JedisConnectionFactory();
}
@Bean
public RedisTemplate<String, Object> redisTemplate() {
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(jedisConnectionFactory());
return template;
}
}