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

Весенняя загрузка с сервисом преобразования Redis и пользовательским конвертером ключей

Эта статья посвящена интеграции Spring-boot и Redis с использованием spring-data-redis. Весенние данные… Помечен как java, весенняя загрузка, redis, кэширование.

Эта статья посвящена интеграции Spring-boot и Redis с использованием spring-data-redis. Spring Data Redis – это абстракции платформы Spring Data для Красный – это популярное хранилище структур данных в памяти. Полный исходный код этого проекта доступен на GitHub . Давайте сразу перейдем к делу.

Я предполагаю, что вы уже знакомы с spring boot и redis и выбрали redis в качестве хранилища кэша для своего проекта.

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

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

String cacheKey = "user-data"; 
   Cache cache = cacheManager.getCache(cacheKey);
   Cache.ValueWrapper result = cache != null ? cache.get(cacheKey) : null;
   if(result.get()!=null){
        // get the data and proceed 
    }else{
        cache.put(cacheKey, userData);
    }

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

# Шаги по интеграции spring data redis

  1. добавьте следующие зависимости в свой файл build.gradle или, если это maven, то в pom.xml

группа компиляции: “org.springframework.data”, название: “spring-data-redis”, версия: “2.1.5.РЕЛИЗ” группа компиляции: ‘org.apache.commons’, имя: ‘commons-pool2’, версия: ‘2.0’ группа компиляции: ‘redis.клиенты’, имя: ‘jedis’, версия: ‘2.9.3’

  1. Создайте пользовательский ключ и класс конвертера, например.
 @AllArgsConstructor
 public class UserCacheKey {
 private String key;
}

Аннотации @Getter и @AllArgsConstructor являются частью проекта Lombok, о котором мы можем рассказать в другой статье. Если вы не знаете о Lombok, добавьте методы и конструктор сеттера-геттера по умолчанию с ключевым аргументом.

 public class UserCacheKeyConverter implements Converter {
  private UserServive userService;
  public UserCacheKeyConverter(UserServive userService) {
   this.userService = userService;
 }
 @Nullable
 @Override
 public String convert(UserCacheKey userCacheKey) {
 String userId = userService.getUserId(userCacheKey);
 return String.format("%s_%s", userId , userCacheKey.getKey());
 }
}
  1. Создайте файл конфигурации Redis.
@Bean(name = "userCacheManager")
 public RedisCacheManager userCacheManager(RedisConnectionFactory 
 connectionFactory, UserService userService) {
 RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig();
 DefaultFormattingConversionService conversionService = (DefaultFormattingConversionService) redisCacheConfiguration.getConversionService();
 conversionService.addConverter(UserCacheKey.class, String.class, new UserCacheKeyConverter(userService));
 redisCacheConfiguration
 .entryTtl(Duration.ofSeconds(1800)).withConversionService(conversionService)
 .disableCachingNullValues();
 return RedisCacheManager.builder(connectionFactory)
 .cacheDefaults(redisCacheConfiguration)
 .withInitialCacheConfigurations(Collections.singletonMap("user-cache", redisCacheConfiguration))
 .build();
 }

итак, здесь мы создаем RedisCacheManager, который будет обрабатывать только операции, связанные с пользовательским кэшем. В любом месте мы можем ввести этот RedisCacheManager в качестве именованного компонента userCacheManager (@Квалификатор(userCacheManager)) и выполнить соответствующие операции, такие как

Cache cache = userCacheManager.getCache("user-cache");
 UserCacheKey cacheKey = new UserCacheKey("some-user-data");
 Cache.ValueWrapper result = cache != null ? cache.get(cacheKey) : null;
 if(result.get()!=null){
 // get the data and proceed 
 }else{
 cache.put(cacheKey, userData);
 }

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

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

Оригинал: “https://dev.to/tech_sam/spring-boot-with-redis-conversion-service-and-custom-key-converter-5fk9”