背景:
我使用redis多库的目的很简单,我将token 保存在0号库,至于其他的缓存信息我希望保存在1号库,我想到的是两种方案,一种是用原有的连接,进行库的切换,第二种就是干脆再建立一个Factory进行连接。个人比较看好第二种,因为第一种的话会在两个库之间来回切换,消耗性能,而且这多线程情况下是不安全的,加锁虽然能起到作用了,但这无疑又更加的消耗性能了,综上,选择再建工厂的方式。
使用条件:
我使用的是jdk8 spring-boot-starter-data-redis版本是2.0.2,这个版本的差异非常重要,许多人用着用着结果就报错了。yml只配置了host,port用来做一下测试
参考链接:https://blog.csdn.net/u011424470/article/details/80080944
官方文档:https://docs.spring.io/spring-data/redis/docs/2.1.8.RELEASE/reference/html/
像这位博主使用的版本应该是以前的,因为我在尝试的时候好些方法都已经过期了,而且还遇到了坑。创建RedisConnectionFactory有两种方式,一种是JedisConnectionFactory ,另外一种则是使用 lettuceConnectionFactory ,很不幸的是JedisConnectionFactory我刚写入bean就报错,具体原因还有待分析,以下都以lettuceConnectionFactory来讲。
官方文档里面写的都非常的简单
创建工厂不是目的,目的是用redisTemplate起到链接,要做存储,以下
@Bean(name = "redisTemplate")//负责存储token
public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory redisConnectionFactory) {//工厂默认创建
RedisTemplate<String, String> redisTemplate = new RedisTemplate<String, String>();
redisTemplate.setConnectionFactory(redisConnectionFactory);
return redisTemplate;
}
@Bean(name = "jedisTemplate")//做查询缓存
public RedisTemplate<String, Object> jedisTemplate() {
RedisStandaloneConfiguration config = new RedisStandaloneConfiguration();
config.setDatabase(1);//默认0号库,现在这里是1号库
//config.setPassword(RedisPassword.of(password);本地暂时没有密码
LettuceConnectionFactory lettuceConnectionFactory = new LettuceConnectionFactory(config);//手动创建工厂,这样做的目的就是划分库
lettuceConnectionFactory.setValidateConnection(true);
lettuceConnectionFactory.afterPropertiesSet();
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>();
redisTemplate.setConnectionFactory(lettuceConnectionFactory);
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer());
return redisTemplate;
}
这就是具体的代码了,顺便提一下,在使用redisTemplate的时候序列化很重要,序列化很重要,序列化很重要,我因为这个问题折腾了半天。
看官网友情提示:
如果以上还没能什么帮助的话,请看官网吧。