美文网首页
三、SpringBoot 整合 Redis

三、SpringBoot 整合 Redis

作者: 花季浅忆 | 来源:发表于2019-04-04 11:04 被阅读0次
  1. 引入starters
       <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
  1. application.properties中配置 redis所在主机的ip地址
spring.redis.host=192.168.8.201 #redis所在的主机ip

以上两步就已经和springboot整合好了。

  1. RedisAutoConfiguration配置类中有两个组件分别是 StringRedisTemplate(顾名思义是操作字符串的)和 RedisTemplate<Object, Object> (操作对象)来帮助我们操作Redis
1554346104(1).jpg
  1. 在测试类中测试
    a. 首先我们来看redis中没有任何数据


    1.png

    b. 测试类代码如下: 分别向redis存、取数据。

    @Autowired
    StringRedisTemplate stringRedisTemplate;


    @Test
    public void test01(){
         //给redis中保存数据
        stringRedisTemplate.opsForValue().append("msg","This is From SpringBoot");
        //从redis中取出数据
        String msg = stringRedisTemplate.opsForValue().get("msg");
        System.out.println("=====>"+msg);

    }

然后我们分别看到Redis保存了数据,并且控制台打印了数据


2.png

以上只是简单的字符串操作,包括list ,set hash等的操作类似。

 
     * Redis常见的五大数据类型
     *  String(字符串)、List(列表)、Set(集合)、Hash(散列)、ZSet(有序集合)
     *  stringRedisTemplate.opsForValue()[String(字符串)]
     *  stringRedisTemplate.opsForList()[List(列表)]
     *  stringRedisTemplate.opsForSet()[Set(集合)]
     *  stringRedisTemplate.opsForHash()[Hash(散列)]
     *  stringRedisTemplate.opsForZSet()[ZSet(有序集合)]
    

下面讲解,保存对象到redis中去。
使用下面的代码直接保存对象到redis会报错,因为我们的实体类未序列化,所以实体类一定要序列化。(实现 Serializable 接口)


    @Autowired
    RedisTemplate redisTemplate;
    //测试保存对象
    @Test
    public void test02(){
        Employee empById = employeeMapper.getEmpById(1);
        //默认如果保存对象,使用jdk序列化机制,序列化后的数据保存到redis中
        redisTemplate.opsForValue().set("emp-01",empById);
    }

序列化之后我们看到redis中确实保存了不过是序列化话后的数据


3.jpg

但是,我们更加习惯将数据以json的形式保存到redis中去。两种方法:
1.自己以json的形式保存到redis中去
2.RedisTemplate 中有默认的序列化规则。自定义一个序列化规则


我们来到RedisTemplate 源码中查看
有这么多序列化器

    private RedisSerializer keySerializer = null;
    private RedisSerializer valueSerializer = null;
    private RedisSerializer hashKeySerializer = null;
    private RedisSerializer hashValueSerializer = null;
    private RedisSerializer<String> stringSerializer = new StringRedisSerializer();

默认使用的是JdkSerializationRedisSerializer


4.jpg

然后我们给他切换成json的序列化器就可以了,然后我们来自定义一个类叫MyRedisConfig,给他设置一个defaultSerializer如同

5.png
可以看到该方法需要传入 RedisSerializer 类, 进到RedisSerializer中选中类名然后Ctrl+h
6.png
我们看到, 有一个Jackson2JsonRedisSerializer类我们传入这个就ok了
完整配置如下:
@Configuration
public class MyRedisConfig {
    @Bean
    public RedisTemplate<Object, Employee> redisTemplate(
            RedisConnectionFactory redisConnectionFactory)
            throws UnknownHostException {
        RedisTemplate<Object, Employee> template = new RedisTemplate<Object, Employee>();
        template.setConnectionFactory(redisConnectionFactory);
        template.setDefaultSerializer(new Jackson2JsonRedisSerializer<Employee>(Employee.class));
        return template;
    }


}

最后我们来测试:


7.png

Redish中保存了json格式的数据


8.png

相关文章

网友评论

      本文标题:三、SpringBoot 整合 Redis

      本文链接:https://www.haomeiwen.com/subject/jlffiqtx.html