Redis整合SpringBoot~

95 阅读2分钟

「这是我参与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的思想和每一种数据结构的用处和作用场景!

明天继续加油!