永続化のために 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 マッパー インターフェイスのサンプルを次に示します。
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の例として。うまくいけば、それは理にかなっています。
この投稿を見ましたが、クラス名+メソッド+パラメータで行っているようです。