java - 使用 Java 在 Hibernate 中使用 Ehcache 获取最新数据

标签 java hibernate ehcache

我想知道为什么每当我更改数据库中的某些内容时 Ehcache 都会获取最新数据。根据 Ehcache 的文档,它应该仅在一定的时间间隔后获取。我对么?

这是我的 ehcache.xml

<?xml version="1.0"?>  
<ehcache>  
 <defaultCache   
  maxElementsInMemory="100"   
  eternal="false"   
  timeToIdleSeconds="120"   
  timeToLiveSeconds="200" />  

  <cache name="com.sch.Employee"   
  maxElementsInMemory="100"   
  eternal="false"   
  timeToIdleSeconds="5"   
  timeToLiveSeconds="200" />  
 </ehcache>  

我的实体类

package com.sch;

import javax.persistence.Entity;
import javax.persistence.Id;

import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;

@Cache(usage = CacheConcurrencyStrategy.READ_ONLY)
@Entity
public class Employee {

    @Id
    private int id;
    private String name;


    public Employee() {
    }

    public Employee(String name, float salary) {
        super();
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }   
}

我的理解正确吗?如果没有,EHcache 的幕后到底运行着什么?

最佳答案

TTITTL 决定驱逐过程。

timeToIdleSeconds – 元素可以在缓存中存在而不被访问的最大秒数。该元素在此限制后过期,并且将不再从缓存中返回。默认值为 0,这意味着不会发生 TTI 驱逐(无限生命周期)。

timeToLiveSeconds – 元素可以在缓存中存在的最大秒数(无论是否使用)。该元素在此限制后过期,并且将不再从缓存中返回。默认值为 0,这意味着不会发生 TTL 驱逐(无限生命周期)。

Source

根据定义,您为 Employee 拥有的秒数

 <cache name="com.sch.Employee"   
  maxElementsInMemory="100"   
  eternal="false"   
  timeToIdleSeconds="5"   
  timeToLiveSeconds="200" />

如果您在部署后 5 秒内没有访问员工记录,它将从数据库中获取。

无论如何,即使TTL是200秒,这与使用无关。

因此,设置 TTL - 0、TTI - 3600 并重新测试应用程序。

这样,TTL 驱逐就不会发生,TTI 为一小时,因此您有时间测试您的应用程序

关于java - 使用 Java 在 Hibernate 中使用 Ehcache 获取最新数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35643335/

相关文章:

java - 将 JSON 数组转换为 Java 类对象列表

java - 使用 ehcache 缓存 java.util.Map

java - 如何在 spring xml 文件上启用 ehcache 统计信息

algorithm - Ehcache:配置后遵循什么缓存复制算法?

memcached - 休眠 EHCache 与 MemCache

java - 解析其中包含 %NAME% 等变量的文本

java - 用于添加到二维数组的 while 和 for 循环

java - 使用 Jackson 解析 Json 文件

java - 使用 HQL 查询插入

mysql - groovy : Retrieving diff value 中的 BigDecimal 值存在问题