Spring Cache - Создание собственного KeyGenerator

Spring Cache - Создание собственного KeyGenerator

1. обзор

В этом кратком руководстве мы покажем, как создать собственный генератор ключей с помощью Spring Cache.

Для введения в вышеуказанный модуль, пожалуйста, обратитесь кto this article.

2. KeyGeneratorс

Это отвечает за генерацию каждого ключа для каждого элемента данных в кэше, который будет использоваться для поиска элемента данных при извлечении.

Реализация по умолчанию здесь -SimpleKeyGenerator – w, которая использует параметры метода, предоставленные для генерации ключа. Это означает, что если у нас есть два метода, которые используют одно и то же имя кеша и набор типов параметров, то высока вероятность того, что это приведет к конфликту.

Это также означает, что данные кэша могут быть перезаписаны другим методом.

3. ПользовательскийKeyGenerator

KeyGeneratorпытается реализовать только один единственный метод:

Object generate(Object object, Method method, Object... params)

Если он не реализован или используется неправильно, это может привести к перезаписи данных кеша.

Давайте посмотрим на реализацию:

public class CustomKeyGenerator implements KeyGenerator {

    public Object generate(Object target, Method method, Object... params) {
        return target.getClass().getSimpleName() + "_"
          + method.getName() + "_"
          + StringUtils.arrayToDelimitedString(params, "_");
    }
}

После этого у нас есть два возможных способа его использования; первый объявляет bean-компонент вApplicationConfig.

Важно отметить, что класс должен расширяться отCachingConfigurerSupport или реализовыватьCacheConfigurer:

@EnableCaching
@Configuration
public class ApplicationConfig extends CachingConfigurerSupport {

    @Bean
    public CacheManager cacheManager() {
        SimpleCacheManager cacheManager = new SimpleCacheManager();
        Cache booksCache = new ConcurrentMapCache("books");
        cacheManager.setCaches(Arrays.asList(booksCache));
        return cacheManager;
    }

    @Bean("customKeyGenerator")
    public KeyGenerator keyGenerator() {
        return new CustomKeyGenerator();
    }
}

Второй способ - использовать его только для определенного метода:

@Component
public class BookService {

    @Cacheable(value = "books", keyGenerator = "customKeyGenerator")
    public List getBooks() {
        List books = new ArrayList<>();
        books.add(new Book("The Counterfeiters", "André Gide"));
        books.add(new Book("Peer Gynt and Hedda Gabler", "Henrik Ibsen"));
        return books;
    }
}

4. Заключение

В этой статье мы исследовали способ реализации настраиваемого Spring CacheKeyGenerator.

Как всегда, доступен полный исходный код примеровover on GitHub.

Related