Spring-Boot整合
-
Spring-Boot操作数据:Spring-data jpa jdbc MongoDB redis
-
SpringData也是SpringBoot齐名的项目、
-
说明:在SpringBoot2之后,原来使用的jedis被替换为lettuce
-
jedis:采用的直连,多个线程操作的话。是不安全的,如果想要避免不安全。使用jedis pool连接池!更像BIO模式
-
lettuce:采用netty,实例可以再多个线程中进行共享,不存在的线程不安全的情况!可以减少线程数据了,更像NIO模式
-
源码分析:
-
@Bean @ConditionalOnMissingBean( name = {"redisTemplate"} ) @ConditionalOnSingleCandidate(RedisConnectionFactory.class) public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) { RedisTemplate<Object, Object> template = new RedisTemplate(); template.setConnectionFactory(redisConnectionFactory); return template; } @Bean @ConditionalOnMissingBean @ConditionalOnSingleCandidate(RedisConnectionFactory.class) public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory) { return new StringRedisTemplate(redisConnectionFactory); }
-
整合测试
-
引入依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
-
写入配置
spring: redis: host: 127.0.0.1 port: 6379
-
简单测试
@Test void contextLoads() { //操作基本数据类型 // redisTemplate.opsForValue(); // redisTemplate.opsForList(); // redisTemplate.opsForHash(); //获取数据库连接 // RedisConnection connection = redisTemplate.getConnectionFactory().getConnection(); // connection.flushAll(); //将一个值插入到数据库,并获取 redisTemplate.opsForValue().set("key1","dxz"); System.out.println(redisTemplate.opsForValue().get("key1")); }
-
-
注意:在数据库中传入对象的时候
-
一定要进行对象序列化!!
-
public class User implements Serializable { //实现serializable接口 private String name; private int age; }
-
使用自己的redis配置,进行对象序列化
-
@Configuration public class RedisConfig { @Bean @SuppressWarnings("all") public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) { //我们为了方便直接使用String和Object RedisTemplate<String, Object> template = new RedisTemplate(); template.setConnectionFactory(redisConnectionFactory); //Json序列化 Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); ObjectMapper om = new ObjectMapper(); om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); om.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, 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); //hash的value也采用jackson template.setHashValueSerializer(jackson2JsonRedisSerializer); template.afterPropertiesSet(); return template; } }
-