我是靠谱客的博主 感性刺猬,最近开发中收集的这篇文章主要介绍具有Redis转换服务和自定义密钥转换器的Spring Boot,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

This article is all about Spring-boot and Redis integration with using spring-data-redis.Spring Data Redis is the abstractions of the Spring Data platform to Redis the popular in-memory data structure store. The full source code for this project is available on GitHub. Let’s straight come to the point.

我假设您已经熟悉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);
    }

但是,如果要保存单个用户数据,那么上述逻辑将不起作用。 然后,我们可以将转换服务与自定义密钥转换器一起使用,从而使我们可以向用户数据(如用户ID)添加动态前缀。

# Steps to integrate spring data redis

  1. add following dependencies into your build.gradle file or if it is maven then in pom.xml

编译组:“ org.springframework.data”,名称:“ spring-data-redis”,版本:“ 2.1.5.RELEASE” 编译组:“ org.apache.commons”,名称:“ commons-pool2”,版本:“ 2.0” 编译组:“ redis.clients”,名称:“ jedis”,版本:“ 2.9.3”

  1. Create a custom key and converter class like.
 @AllArgsConstructor
 public class UserCacheKey {
 private String key;
}

@Getter和@AllArgsConstructor批注是Lombok项目的一部分,我们可以在其他文章中介绍。 如果您不了解Lombok,则添加带有键参数的默认setter getter方法和构造函数。

 public class UserCacheKeyConverter implements Converter<UserCacheKey, String> {
  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. Create a Redis configuration file.
@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注入为命名的bean userCacheManager(@Qualifier(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方法时,它将调用缓存转换器并转换密钥。 这将帮助我们抽象出缓存逻辑并降低复杂性。

如果您认为这有帮助,或者想与任何有关Web或移动开发的内容进行聊天; 在下面发表评论。 我很想讨论。 请继续关注更多内容。

from: https://dev.to//tech_sam/spring-boot-with-redis-conversion-service-and-custom-key-converter-5fk9

最后

以上就是感性刺猬为你收集整理的具有Redis转换服务和自定义密钥转换器的Spring Boot的全部内容,希望文章能够帮你解决具有Redis转换服务和自定义密钥转换器的Spring Boot所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部