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

Fetch latest data using Ehcache in Hibernate using Java

我想知道为什么每当我更改数据库中的内容时 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>  

我的实体class

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 – The maximum number of seconds an element can exist in the cache without being accessed. The element expires at this limit and will no longer be returned from the cache. The default value is 0, which means no TTI eviction takes place (infinite lifetime).

timeToLiveSeconds – The maximum number of seconds an element can exist in the cache regardless of use. The element expires at this limit and will no longer be returned from the cache. The default value is 0, which means no TTL eviction takes place (infinite lifetime).

Source

根据所定义的定义,您为员工提供的秒数

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

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

反正TTL也是200秒,不管用

因此将 TTL - 0、TTI - 3600 重新测试应用程序。

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