什么是jedis
是官方推荐的java连接开发工具!使用java操作Redis中间件,如果要用java操作redis,那么一定要对jedis十分熟悉。
jedis的使用:
1.导入jedis依赖
Maven Repository: redis.clients » jedis » 4.1.1 (mvnrepository.com)
2.编码测试
- 连接数据库
- 操作命令
- 断开连接
jedis.close();
通过jedis再次理解事务
StringBoot整合
说明在springBoot2.x之后,原来使用的jedis被替换为了lettuce
jedis:采用的直连,多个线程操作的话,是不安全的,如果想要避免不安全的,使用jedis pool连接池,更像BIO
lettuce:采用netty,实例可以在多个线程中进行共享,不存在线程不安全的情况!可以减少线程数据,效率更高,更像NIO
源码分析:
@Bean
@ConditionalOnMissingBean(
name = {"redisTemplate"}
)// 我们可以自己定义一个redisTemplate来替换这个默认的
@ConditionalOnSingleCandidate(RedisConnectionFactory.class)
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
//默认的RedisTemplate 没有过多的设置,redis对象都是需要序列化
//两个泛型都是object,object的类型,我们后使用需要强制转换<String,Object>
RedisTemplate<Object, Object> template = new RedisTemplate();
template.setConnectionFactory(redisConnectionFactory);
return template;
}
//由于String是redis是最常用的类型,所以说单独提出来了一个bean
@Bean
@ConditionalOnMissingBean
@ConditionalOnSingleCandidate(RedisConnectionFactory.class)
public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory) {
return new StringRedisTemplate(redisConnectionFactory);
}
整合测试:
1.导入依赖
2.配置连接
3.测试
自定义RedisTemplate
@Configuration
public class RedisConfig {
//编写我们自己的redisTemolate
@Bean
public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory redisConnectionFactory)throws UnknownHostException {
//为了开发方便,一般直接用<String,Object>
RedisTemplate<String, Object> template = new RedisTemplate();
template.setConnectionFactory(redisConnectionFactory);
//使用json的方式序列化所有对象
Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<Object>(Object.class);
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
//创建string的序列化器
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
//设置所有的key都使用string类型的序列化器
template.setKeySerializer(stringRedisSerializer);
//设置所有的hash类型的key也是用string类型的序列化器
template.setHashKeySerializer(stringRedisSerializer);
//设置hash类型的value使用json序列化器
template.setHashValueSerializer(jackson2JsonRedisSerializer);
//设置所有的value都使用json序列化器
template.setValueSerializer(jackson2JsonRedisSerializer);
template.afterPropertiesSet();
return template;
}
}