Рубрики
Без рубрики

Spring Cache – Создание пользовательского генератора ключей

Узнайте, как реализовать пользовательский генератор ключей кэша Spring.

Автор оригинала: baeldung.

1. Обзор

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

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

2. Генератор ключей

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

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

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

3. Пользовательский генератор ключей

/| Генератор ключей должен реализовать только один метод:

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, "_");
    }
}

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

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

@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 .

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