当前位置 : 主页 > 编程语言 > java >

Java SpringBoot 集成 Redis详解

来源:互联网 收集:自由互联 发布时间:2021-11-19
目录 1、概述 Redis是什么? Redis能该干什么? 特性 2、测试Redis 3、自定义redisTemplate 1、概述 Redis是什么? Redis(Remote Dictionary Server ),即远程字典服务。 是一个开源的使用ANSI C语言编写
目录
  • 1、概述
    • Redis是什么?
    • Redis能该干什么?
    • 特性
  • 2、测试Redis
    • 3、自定义redisTemplate

      1、概述

      Redis是什么?

      Redis(Remote Dictionary Server ),即远程字典服务。

      是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

      与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

      Redis能该干什么?

      1. 内存存储、持久化,内存是断电即失的,所以需要持久化(RDB、AOF)
      2. 高效率、用于高速缓冲
      3. 发布订阅系统
      4. 地图信息分析
      5. 计时器、计数器(eg:浏览量)
      6. … …

      特性

      1. 多样的数据类型
      2. 持久化
      3. 集群
      4. 事务

      2、测试Redis

      SpringBoot操作数据,Spring-Data、 jbdc、redis… …

      SpringData与SpringBoot齐名的项目!

      说明:在SpringBoot2.x之后,原来使用的jedis被替换为lettuce

      jedis:采用的直连,多个线程操作的话,是不安全的,如果想要避免不安全的,需使用jedis pool连接池!像BIO模式

      lettuce:采用netty,实例可以再多个线程中进行共享,不存在线程不安全的情况!可以减少线程数据,更像NIO模式

      img

      新建一个项目

      img

      img

      注意:

      img

      查看底层

      img

      源码分析:

      @Bean
      @ConditionalOnMissingBean(  //如果未注入组件条件,我们自己可以定义一个redisTemplate来替换这个默认的
          name = {"redisTemplate"}
      )
      public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
          //默认的 RedisTemplate 没有过多的设置 redis 都是需要序列化的  !
          //两个泛型都是 Object  Object的类型,我们往后使用需要强制转换<String,String>
          RedisTemplate<Object, Object> template = new RedisTemplate();
          template.setConnectionFactory(redisConnectionFactory);
          return template;
      }
      
      @Bean
      @ConditionalOnMissingBean  //由于String 是redis 中最常用的类型  所有说单独提出来一个bean!
      public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
          StringRedisTemplate template = new StringRedisTemplate();
          template.setConnectionFactory(redisConnectionFactory);
          return template;
      }
      

      1、导入依赖

      2、配置连接

      # SpringBoot 所有的配置类 都有一个自动配置类  RedisAutoConfiguration
      # 自动配置类都会绑定一个 properties 配置文件  RedisProperties
      
      
      #配置 redis
      spring.redis.host=127.0.0.1
      spring.redis.port=6379
      
      spring.redis
      

      3、测试!

      package com.kk;
      
      import org.junit.jupiter.api.Test;
      import org.springframework.beans.factory.annotation.Autowired;
      import org.springframework.boot.test.context.SpringBootTest;
      import org.springframework.data.redis.connection.RedisConnection;
      import org.springframework.data.redis.core.RedisTemplate;
      
      @SpringBootTest
      class Redis01SpringbootApplicationTests {
      
          @Autowired
          private RedisTemplate redisTemplate;
      
          @Test
          void contextLoads() {
              /*
              redisTemplate
              opsForValue  操作字符串的  类似String
              opsForList  操作List  类似List
              opsForSet
              opsForHash
              opsForZSet
              opsForGeo
              opsForHyperLogLog
      
              除了基本的操作 ,我们常用的方法都可以直接通过redisTemplate 比如事务和基本的CRUD
      
      
               */
      
      
              //获取redis的连接对象
      //        RedisConnection connection = redisTemplate.getConnectionFactory().getConnection();
      //        connection.flushDb();
      //        connection.flushAll();
      
              redisTemplate.opsForValue().set("kk1","kk2");
              System.out.println(redisTemplate.opsForValue().get("kk1"));
      
          }
      
      }
      

      img

      3、自定义redisTemplate

      首先先建一个实体类,测试

      User类

      package com.kk.pojo;
      
      import lombok.AllArgsConstructor;
      import lombok.Data;
      import lombok.NoArgsConstructor;
      import org.springframework.stereotype.Component;
      
      import java.io.Serializable;
      
      @Component
      @Data
      @AllArgsConstructor
      @NoArgsConstructor
      //在企业中,我们所有的pojo都会序列化
      public class User implements Serializable {
          private String name;
          private int age;
      }
      

      测试:

      @Test
      public void test() throws JsonProcessingException {
          //真实的开发一般都使用json来传递对象
          User user = new User("kk", 17);
          String jsonUser = new ObjectMapper().writeValueAsString(user);//这样就变成了一个json对象了
          redisTemplate.opsForValue().set("user",jsonUser);
          System.out.println(redisTemplate.opsForValue().get("user"));
      }
      

      r = new ObjectMapper().writeValueAsString(user);//这样就变成了一个json对象了
      redisTemplate.opsForValue().set(“user”,jsonUser);
      System.out.println(redisTemplate.opsForValue().get(“user”));
      }

      ==注意:如果不在User类中实现序列化,它会报错==

      到此这篇关于Java SpringBoot 集成 Redis详解的文章就介绍到这了,更多相关Java 集成 Redis内容请搜索自由互联以前的文章或继续浏览下面的相关文章希望大家以后多多支持自由互联!

      网友评论