【发布时间】:2022-09-30 00:03:09
【问题描述】:
我在 Java 应用程序中使用 ehcache 作为休眠 l2 缓存。 我想要一种可以自定义缓存键的方法,因此将来我会将对象 ID 转换为缓存键并将其逐出。
有没有办法自定义存储在缓存中的密钥?
标签: java hibernate caching ehcache
我在 Java 应用程序中使用 ehcache 作为休眠 l2 缓存。 我想要一种可以自定义缓存键的方法,因此将来我会将对象 ID 转换为缓存键并将其逐出。
有没有办法自定义存储在缓存中的密钥?
标签: java hibernate caching ehcache
您可以通过提供自定义org.hibernate.cache.spi.CacheKeysFactory 实现来自定义缓存键,但要做到这一点,您需要注册自定义org.hibernate.cache.spi.CacheImplementor 服务,可能扩展org.hibernate.cache.internal.EnabledCaching,或自定义org.hibernate.cache.spi.RegionFactory 服务,可能扩展org.hibernate.cache.jcache.internal.JCacheRegionFactory。
这很麻烦,但如果你真的愿意,你可以做到。不过,您可以轻松地通过对象 id 创建缓存键,就像 Hibernate 一样。然后,您也应该能够手动逐出条目。
对于实体,您可以确定EntityDataAccess 到EntityPersister#getCacheAccessStrategy(),对于集合,您可以确定CollectionDataAccess 到CollectionPersister#getCacheAccessStrategy()。这两种类型提供了一个名为generateCacheKey 的方法,它负责创建缓存键,它委托给CacheKeysFactory。这些类型的好处是,它们还有evict 方法,因此您不必关心Hibernate 可能对缓存名称进行的名称修改。
【讨论】: