我有一個基於Guava緩存的使用spring緩存的spring應用程序。由於高吞吐量需求和背寫功能,我們正在考慮遷移到Gemfire。 我成功地將Gemfire配置爲緩存,並且能夠從緩存讀取和寫入。在所有的配置示例中,配置需要LocalRegionFactory的定義如下:如何在沒有明確定義區域的情況下爲spring cache manager配置gemfire?
@Bean
public Region<Long,Person> myPersonRegion(LocalRegionFactoryBean<Long, Person> personRegion) throws Exception {
return personRegion.getObject();
}
@Bean
public LocalRegionFactoryBean<Long, Person> personRegion(GemFireCache cache,AsyncEventQueue gemfireQueue) {
LocalRegionFactoryBean<Long, Person> personRegion = new LocalRegionFactoryBean<>();
personRegion.setCache(cache);
personRegion.setClose(false);
personRegion.setName("person");
personRegion.setAsyncEventQueues(new AsyncEventQueue[]{gemfireQueue});
personRegion.setPersistent(false);
return personRegion;
}
豆被定義後,我們可以使用@Cacheable(值=「人」),@CacheEvict(值=「人」) 。如果我們直接使用緩存名稱,則gemfire會拋出緩存未定義的錯誤。
我們使用番石榴(或Hazelcast,redis等)的經驗是,我們不需要明確定義緩存。它將在第一次發生時由Spring自動創建。
有沒有辦法配置gemfire也以同樣的方式表現?
真的很感謝您提供詳細的說明。我將嘗試測試和BeatPostProcessor方法。幾點: 1. Hazelcast支持動態緩存創建。請找到下面的要點[鏈接](https://gist.github.com/sandheepgr/c715ce530a279b27a8144ef834c19918)。這是一個測試設置,從來沒有爲我們生產。 2.是否有用於後寫配置的特定模式。我已經定義了編寫器和加載器,並立即寫入數據庫(也可以使用異步)。但是不會合並數據以僅寫入上次更新。 – Sandheep
Hi @ Sandheep-我仍然懷疑Hazelcast會動態創建緩存。它至少需要某種分佈式對象(分佈式數據結構),比如Map。即使是「HazelcastCacheManger」源代碼(https://github.com/hazelcast/hazelcast/blob/master/hazelcast-spring/src/main/java/com/hazelcast/spring/cache/HazelcastCacheManager.java#L47-L58)也表示Spring'Cache'存在很多。一個區別可能是您創建了一個客戶端Hazelcast實例(第44行),該實例正在連接到可能已經定義了Map的某個現有集羣。然後... –
對於Hazelcast的'CacheManager'來說,查找和定位(遠程)DistributedObject是一件簡單的事情(https://github.com/hazelcast/hazelcast/blob/master/hazelcast-spring/src/main/java /com/hazelcast/spring/cache/HazelcastCacheManager.java#L61-L71)。在我的配置diff是由Boot創建的HazelcastInstance(https://github.com/spring-projects/spring-boot/blob/v1.4.0.RELEASE/spring-boot-autoconfigure/src/main/java/org/springframework的的/ boot /自動配置/ hazelcast/HazelcastAutoConfiguration。java)實際上是一個沒有預先存在的數據結構的嵌入式數據節點,無論如何... –