一:了解
说明:在SpringBoot2.x之后,原来使用的jedis被替换为了lettuce
jedis :采用的直连,多个线程操作的话,是不安全的,如果想要避免不安全,使用jedis pool 连接池!更像BIO 模式
lettuce :采用netty ,实例可以再多个线程中进行共享,不存在线程不安全的情况!可以减少线程数据了,更像NIO模式
二:源码分析
三:测试连接
1.导入pom.xml配置
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2.配置连接信息
spring.redis.host=127.0.0.1
spring.redis.port=6379
3.连接测试
@Test
void contextLoads3(){
// redisTemplate 操作不同的数据类型, api和我们的指令是一样的
// opsForValu 操作字符串类似String
// opsForlist 操作List类似List
// opsForSet
// opsForHash
// opsForzset
// opsForGeo
// opsForHyperlogLog
//除了进本的操作,我们常用的方法都可以直接通过redisTemplate操作,比如事务和基本的CRUD
//获取redis的连接对象
//RedisConnection connection = redisTemplate.getConnectionFactory().getConnection();
//connection.flushDb();
//connection.flushAll();
redisTemplate.opsForValue().set("mykey" ,"redis测试");
redisTemplate.opsForValue().get("mykey");
}
需要注意的是:当传入的值是一个对象时,要把对象进行序列化,否则会报序列化失败的异常。所以在实体类中一般都要implements Serializable。
redisTemplate默认使用jdk序列化,并且是RedisTemplate<Object, Object>我们可以自定义redisTemplate
@Configuration public class RedisConfig { //自己定义了一个RedisTemplate @Bean @SuppressWarnings("all") public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) { //我们为了自己开发方便,一般直接使用<String, object> RedisTemplate<String, Object> template = new RedisTemplate<String,Object>(); template.setConnectionFactory(factory); //序到化配置 Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); ObjectMapper om = new ObjectMapper(); om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); jackson2JsonRedisSerializer.setObjectMapper(om); // String 的序列化 StringRedisSerializer stringRedisSerializer = new StringRedisSerializer(); // key采用String的序列化方式 template.setKeySerializer(stringRedisSerializer); // hash的key也采用String的序列化方式 template.setHashKeySerializer(stringRedisSerializer); // value序列化方式采用jackson template.setValueSerializer(jackson2JsonRedisSerializer); template.afterPropertiesSet(); return template; } }
在调用的类中注入RedisTemplate 然后使用。 @Autowired private RedisTemplate redisTemplate;