項目X包含以下幾部分:在Spring /休眠中正確使用高速緩存
a。 Spring數據存儲庫具有不同的方法,如:
@Cacheable(value = "xobjects", unless = "#result == null")
XObject findByParamA(String paramA);
@Cacheable(value = "xobjects", unless = "#result == null")
XObject findByParamB(String paramB);
@CacheEvict("xobjects")
<E extends XObject> E save(E entity);
b。 Hibernate也使用「xobjects」緩存。
問題#1 既然有加的對象的2種方式緩存時相同的對象出現2次,也可能是這種情況。如何更好地解決這個問題?例如使用結果對象中的鍵。喜歡的東西:
鍵=「#result.id」
問題#2 我不想從緩存中驅逐所有對象時,「保存」方法被調用,但我不確保當前的實施將起作用。 「保存」方法有xobject作爲輸入,所以CacheEvict將它用作驅逐的關鍵,沒有我期望會發生的事情。在這裏,我相信能夠像上面一樣使用魔術鍵的相同方法會很好。
更新#1其實我覺得我的建議能正常工作,這裏是一個樣本 - https://github.com/zhangkaitao/spring4-showcase/blob/master/spring-cache/src/main/java/com/sishuok/spring/service/UserService2.java 但我需要先進行測試。稍後將分享結果。
您確定要爲此使用Spring Cache抽象或使用您的ORM提供程序的第二級緩存,因爲它會自動爲您執行這些操作。 –
我在想這件事,那很好。我已經用@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)標記了XObject並啓用了「hibernate.cache.use_second_level_cache」。但是上面的方法沒有被緩存。查詢緩存會有幫助嗎? – ICE