「这是我参与2022首次更文挑战的第29天,活动详情查看:2022首次更文挑战」
Redis整合SpringBoot
SpringBoot操作数据:spring-data jpa jdbc mongodb redis!
源码分析:
我们可以自己定义一个redisTemplate来替换这个默认的!
@Bean
@ConditionalOnMissingBean(name = {"redisTemplate"})
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
//默认的RedisTemplate没有过多的设置,redis对象都是需要序列化的!
//两个泛型都是Object,Object的类型,我们后使用需要强制转换<String , Object>
RedisTemplate<Object, Object> template = new RedisTemplate();
template.setConnectionFactory(redisConnectionFactory);
return template;
}
@Bean
//由于String时redis中最常用的类型,所以说单独提出来了一个bean!
@ConditionalOnMissingBean
public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
StringRedisTemplate template = new StringRedisTemplate();
template.setConnectionFactory(redisConnectionFactory);
return template;
}
整合测试一下
1、导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2、配置连接
#配置redis
spring.redis.host=127.0.0.1
spring.redis.port=6379
3、测试
@SpringBootTest
class Redis02SpringbootApplicationTests {
@Autowired
private RedisTemplate redisTemplate;
@Test
void contextLoads() {
//redisTemplate 操作不同的数据类型,api和我们的指令时一样的
//opsForValue(); 操作字符串 类似String
//opsForList(); 操作List 类似List
//opsForSet(); 操作Set 类似Set
//opsForHash(); 操作Hsah 类似Hash
//opsForZSet(); 操作Zset 类似Zset
//opsForGeo(); 操作Geo(地理位置)
//opsForHyperLogLog(); 操作HyperLogLog
//除了进本的操作,我们常用的方法都可以直接通过redisTemplate操作,比如事务,和基本的CRUD
//获取redis的连接对象
//操作数据库对象
// RedisConnection connection = redisTemplate.getConnectionFactory().getConnection();
// connection.flushDb();
// connection.flushAll();
redisTemplate.opsForValue().set("mykey","杨哥");
System.out.println(redisTemplate.opsForValue().get("mykey"));
}
}
-
redisTemplate:操作不同的数据类型,api和我们的指令时一样的
-
opsForValue(); 操作字符串 类似String
-
opsForList(); 操作List 类似List
-
opsForSet(); 操作Set 类似Set
-
opsForHash(); 操作Hsah 类似Hash
-
opsForZSet(); 操作Zset 类似Zset
-
opsForGeo(); 操作Geo(地理位置)
-
opsForHyperLogLog(); 操作HyperLogLog
-
我们来编写一个自己的RedisTemplate
@Configuration
public class RedisConfig {
//编写我们自己的 redisTemplate
@Bean
@SuppressWarnings("all")
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) throws UnknownHostException {
//我们为了自己开发方便,一般直接使用<String, Object>
RedisTemplate<String,Object> template = new RedisTemplate<String,Object>();
template.setConnectionFactory(factory) ;
//Json序列化配置
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);
//hash的vaLue序列化方式采用jackson
template.setHashValueSerializer(jackson2JsonRedisserializer);
template.afterPropertiesSet();
return template;
}
}
所有的redis操作,其实对于java开发人员来说,十分的简单,更重要的是去理解redis的思想和每一种数据结构的用处和作用场景!
明天继续加油!