У меня есть приложение Spring, которое использует MyBatis для сохранения. Я использую 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.
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);
}
Поскольку у меня есть общий кеш, мне нужен способ, чтобы мои ключи были уникальными для объекта домена. В качестве примера при сохранении или удалении мне нужно очистить кеш, чтобы новые значения отображались в пользовательском интерфейсе. Однако я не хочу очищать весь кеш. Я не знаю, как подойти к этому, чтобы при вызове удаления и удалении кеша очищались только записи в кеше mybatis с for Institution с этим идентификатором.
Ключ должен быть чем-то вроде доменного имени + параметры. Например учреждение + id. Надеюсь, это имеет смысл.
Я видел этот пост, но, похоже, он идет по имени класса + методу + параметрам.