Использование Spring Cache с Hazelcast Near Cache - PullRequest
1 голос
/ 20 февраля 2020

Я пытаюсь настроить Spring CacheManager с Hazelcast. Кроме того, я хочу настроить Hazelcast Near Cache, чтобы я мог получить (уже десериализованный) экземпляр моего кэшированного объекта.

Вот моя конфигурация


    @Bean
    public HazelcastInstance hazelcastConfig() {
        val config = new Config().setInstanceName("instance");
        val serializationConfig = config.getSerializationConfig();
        addCacheConfig(config, "USERS")
        serializationConfig.addSerializerConfig(new SerializerConfig()
                        .setImplementation(getSerializer())
                        .setTypeClass(User.class)
        return Hazelcast.newHazelcastInstance(config);
    }

    @Bean
    public CacheManager cacheManager(HazelcastInstance hazelcastInstance) {
        return new HazelcastCacheManager(hazelcastInstance);
    }

    @Bean
    public PlatformTransactionManager chainedTransactionManager(PlatformTransactionManager jpaTransactionManager, HazelcastInstance hazelcastInstance) {
        return new ChainedTransactionManager(
                jpaTransactionManager,
                new HazelcastTransactionManager(hazelcastInstance)
        );
    }

    // Configure Near Cache
    private void addCacheConfig(Config config, String cacheName) {
        val nearCacheConfig = new NearCacheConfig()
                .setInMemoryFormat(OBJECT)
                .setCacheLocalEntries(true)
                .setInvalidateOnChange(false)
                .setTimeToLiveSeconds(hazelcastProperties.getTimeToLiveSeconds())
                .setEvictionConfig(new EvictionConfig()
                        .setMaxSizePolicy(ENTRY_COUNT)
                        .setEvictionPolicy(EvictionPolicy.LRU)
                        .setSize(hazelcastProperties.getMaxEntriesSize()));
        config.getMapConfig(cacheName)
                .setInMemoryFormat(BINARY)
                .setNearCacheConfig(nearCacheConfig);
    }

Сохранение и извлечение из кэша: работает нормально, но мой объект десериализуется каждый раз, когда у меня происходит попадание в кеш. Я хочу избежать этого времени десериализации с использованием NearCache, но оно не работает. Я также пробовал двоичный формат памяти.

Возможно ли это с Hazelcast? Или эта десериализация всегда выполняется, даже если у меня есть NearCache?

Спасибо

1 Ответ

0 голосов
/ 06 марта 2020

Итак, после нескольких изменений, он работает сейчас. Вот мой вывод:

Итак, чтобы NearCache работал с Spring Cache, все ваши кэшированные объекты должны быть неизменными . Это означает финальные классы и финальные поля. Также все они расширяют интерфейс Serializable.

...