如果密钥不在Cache中,则Spring Data Redis不会从数据库中检索值

时间:2018-06-16 03:02:24

标签: spring caching redis

我最近从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;
}
}

0 个答案:

没有答案