我有一个使用 MyBatis 进行持久性的 Spring 应用程序。我正在使用 ehcache,因为速度对于这个应用程序很重要。我已经设置并配置了 MyBatis 和 Ehcache。我正在使用一个名为“mybatis”的缓存,因为否则为每个实体创建单独的缓存将是荒谬的。
这是我的 ehcache.xml。
<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="ehcache.xsd"
updateCheck="false"
monitoring="autodetect"
dynamicConfig="true">
<diskStore path="java.io.tmpdir" />
<cache name="mybatis"
maxBytesLocalHeap="100M"
maxBytesLocalDisk="1G"
eternal="false"
timeToLiveSeconds="0"
timeToIdleSeconds="0"
statistics="true"
overflowToDisk="true"
memoryStoreEvictionPolicy="LFU">
</cache>
<cache name="jersey"
maxBytesLocalHeap="100M"
maxBytesLocalDisk="1G"
eternal="false"
timeToLiveSeconds="600"
timeToIdleSeconds="300"
statistics="true"
overflowToDisk="true"
memoryStoreEvictionPolicy="LFU">
</cache>
</ehcache>
这是我的 mybatis mapper 界面的示例。
import java.util.List;
public interface InstitutionMapper {
@Cacheable(value = "mybatis")
List<Institution> getAll();
@Cacheable(value = "mybatis", key = "id")
Institution getById(long id);
@CacheEvict(value = "mybatis")
void save(Institution institution);
@CacheEvict(value = "mybatis", key = "id")
void delete(long id);
}
因为我有一个共享缓存,所以我需要一种方法让我的键对域对象是唯一的。作为保存或删除的示例,我需要清除缓存,以便新值显示在 UI 上。但是我不想清除整个缓存。我不知道如何解决这个问题,以便在调用 delete 并驱逐缓存时,只有具有该 ID 的机构的 mybatis 缓存中的条目才会被清除。
密钥需要是域名+参数之类的东西。例如机构+ id。希望这是有道理的。
我看到了这篇文章,但它似乎是按类名+方法+参数进行的。