概述
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
- 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”
- 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());
}
}
- 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所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复