当前位置: 首页 > 知识库问答 >
问题:

在Spring 4中干涸通用RedisTemplate

益思博
2023-03-14
public abstract class RedisService<T> implements InitializingBean {

private final String VALUE_KEY_PREFIX;
private final String SET_KEY;

@Autowired
private RedisTemplate<String, T> valueTemplate;

@Autowired
private StringRedisTemplate stringTemplate;

private SetOperations<String, String> setOperations;
private ValueOperations<String, T> valueOperations; 
// and so on...
}
@Bean
public RedisTemplate<String, MyTypeA> myTypeARedisTemplate() {
    RedisTemplate<String, MyTypeA> template = new RedisTemplate<>();

    template.setKeySerializer(stringRedisSerializer());
    template.setHashKeySerializer(stringRedisSerializer());
    template.setValueSerializer(new Jackson2JsonRedisSerializer<>(MyTypeA.class));
    template.setConnectionFactory(jedisConnectionFactory());

    return template;
}

@Bean
public RedisTemplate<String, MyTypeB> myTypeBRedisTemplate() {
    RedisTemplate<String, MyTypeB> template = new RedisTemplate<>();

    template.setKeySerializer(stringRedisSerializer());
    template.setHashKeySerializer(stringRedisSerializer());
    template.setValueSerializer(new Jackson2JsonRedisSerializer<>(MyTypeB.class));
    template.setConnectionFactory(jedisConnectionFactory());

    return template;
}
// ... for N MyType classes.
@Service
public class MyTypeAService extends RedisService<MyTypeA> { 

有没有更干练的方法可以用我的Java配置创建这些RedisTemplate@bean

共有1个答案

段干宏硕
2023-03-14

我也有同样的问题。您可以为此创建一个泛型bean,并使用GenricJackson2JsonRedisserializer。问题是,通过使用这一点,json将保存一些额外的数据,以便以后进行反序列化。

另一种方法是使用Jackson2JsonRedisSerializer,但它需要泛型类型的类实例才能工作,我不知道如何获得。

@Bean("objectRedisTemplate")
public <T> RedisTemplate<String, T> objectRedisTemplate(RedisConnectionFactory redisConnectionFactory) {
    RedisTemplate<String, T> redisTemplate = new RedisTemplate<>();

    redisTemplate.setConnectionFactory(redisConnectionFactory);

    RedisSerializer<String> serializer = new StringRedisSerializer();
    redisTemplate.setKeySerializer(serializer);
    redisTemplate.setHashKeySerializer(serializer);

    redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());

    return redisTemplate;
}

cache类上的用法:

@Autowired
@Qualifier("objectRedisTemplate")
private RedisTemplate<String, MyTypeA> redisTemplate;
 类似资料:
  • > 此代码在Spring5中工作。但我的公司需要Spring 4。 在Spring4中,login与InMemoryAuthentication一起工作很好。但是当我添加了jdbc逻辑(c3p0,MySQL依赖关系&add DataSource代码&jdbc连接,c3p0连接池.properties文件);服务器运行,登录页打开,但身份验证失败(用户名/密码不正确)。 下面是包结构 null 公共

  • 我正在使用Spring4 AsyncRestTemplate调用外部REST API服务。 在该方法中,我注册来自REST API调用的ListenableFuture响应的回调。 除了单元测试,我不使用返回的ListenableFuture。回调将根据请求的成功或失败来处理我想采取的实际操作。 ExternalServiceImpl.class

  • 我无法让Log4j2在日志文件上写入Spring和Spring Security日志消息(后者我绝对需要解决一个问题)。我在这里和其他地方读了很多(当然,就像在Spring参考中),但我无法使我找到的解决方案适用于我的案例。 需要注意的是,在下面的两个解决方案中,地雷日志记录消息和hibernate消息都正确地写入了文件。该问题只影响Spring消息。 据我所知,Spring使用jcl(commo

  • 我已经从4.0升级了Spring版本。从x到4.2.3(刚才是4.2.4),@RequestBody注释中的“required=false”属性突然无法按预期工作(在版本更改之前)。 HttpStatus 415的服务器响应-不支持的媒体类型。 控制器方法(每个Spring版本相同)。 实际上,这并不是问题,因为从客户端开始,避免发送null,例如,设置empty实例就足以修复它。但我想了解,这个

  • 有人能通过xml使用Spring < code > JCacheCacheManager 创建一个Ehcache支持的< code>CacheManager吗?我有这样的东西。不知道如何为Ehcache3创建< code > javax . cache . cache manager 。 谢谢!

  • 我想登录amazons3(用网址:‘https://console . AWS . Amazon . com/iam/home?# security _ credential′)。我在这里使用了phantom2.0.1和selenium2.45.0。 我可以成功打开网站,但是当我在填写用户名和密码后进行“提交”时,网站跳转到一个错误页面,显示“请启用Cookie以继续”。所以我想知道如何在我的ub