1:三者其实都是用来操作redis的
2:springDataRedis是对Jedis和lettuce的一系列封装,简化了很多方法
3:公司里面之所以不怎么用Jedis也是因为其指令比较繁琐难以记忆,不如就用简化了的springDataRedis
4:使用springDataRedis 时,首先要导入springDataRedis的依赖,然后导入Jedis或者lettuce,如果是Jedis,需要再导入slf4j-simple
5:springDataRedis操作Redis提供了2个模板,只需要将任何一个扔到容器中就可以使用
RedisTemplate:可以操作任何类型
StringRedisTemplate:专门操作字符串
具体使用:先扔到容器中:
@Bean
public RedisTemplate redisTemplate(){
RedisTemplate redisTemplate = new RedisTemplate();
return redisTemplate;
}
然后发现执行不了,这时需要去配置一下redis的连接工厂
因为redisConnectionFactory是个接口,我导入的又是jedis,所以用jedis的连接工厂
@Bean
public RedisConnectionFactory redisConnectionFactory(){
JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory();
return jedisConnectionFactory;
}
所以这个时候需要在模板中加入连接工厂:
@Bean
public RedisTemplate redisTemplate(){
RedisTemplate redisTemplate = new RedisTemplate();
redisTemplate.setConnectionFactory(redisConnectionFactory());
return redisTemplate;
}
6:操作后发现几个问题:使用redisTemplate可以存储任何类型,存值取值没有任何影响,但是通过可视化插件查看,默认是看不懂的(因为springDataRedis使用的是默认的序列化器 默认JDK的序列化器)
所以其实可以把redisTemplate换成stringRedisTemplate
@Bean
public StringRedisTemplate stringRedisTemplate(){
StringRedisTemplate stringRedisTemplate = new StringRedisTemplate();
stringRedisTemplate.setConnectionFactory(redisConnectionFactory());
return stringRedisTemplate;
}
StringRedisTemplate这种方式,默认的value一般是字符串,此时存储不会乱码
7:最后你会发现你需要用到数据库连接池,所以要配置一下:
@Bean
public JedisPoolConfig jedisPoolConfig(){
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxTotal(50);
jedisPoolConfig.setMaxIdle(50);
return jedisPoolConfig;
}
这样一来,连接工厂的配置也需要更改一下:
@Bean public RedisConnectionFactory redisConnectionFactory(){ JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory(jedisPoolConfig()); return jedisConnectionFactory; }