Spring Boot学习(十一):Spring Boot 整合Redis - Go语言中文社区

Spring Boot学习(十一):Spring Boot 整合Redis


这里是一个学习过程笔记的汇总:Spring Boot学习汇总


前面一篇已经学习了Spring Boot与缓存,今天就来看看Spring Boot中Redis缓存的使用‘

本篇的学习前提是对redis数据库相关操作都有大概的了解,如果对redis不熟悉,可以参考以下几篇文章进行学习:

Redis的安装以及启动使用

Redis的五种数据类型以及相关操作命令

Redis的持久化方案

Redis的主从复制

Redis主从切换

另外,我学习的时候是在阿里云服务器上布的redis,新人注册阿里云,有免费的一个月使用权限,你值得拥有:阿里云


下面进入今天的学习:

1、首先引入redis模块

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

2、主配置文件中配置redis的主机地址

spring.redis.host=47.94.91.122

这个时候启动项目,可以看到一个RedisAutoConfiguration的配置类就生效了。

我们看一下这个RedisAutoConfiguration配置类都为我们做了什么:

给我们在容器中添加了两个组件,用来简化操作Redis数据库的。然后我们用到时直接注入即可。

3、测试

3.1、启动redis数据库,并打开redis默认的客户端:

3.2、给redis中保存数据。

package com.example.cache;

import com.example.cache.domain.User;
import com.example.cache.mapper.UserMapper;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringBootCacheApplicationTests {

//    @Autowired
//    private UserMapper userMapper;

    @Autowired
    private RedisTemplate redisTemplate;

    @Autowired
    private StringRedisTemplate stringRedisTemplate;


    @Test
    public void test01() {
        // 给redis中保存数据
        stringRedisTemplate.opsForValue().set("msg","hello");
    }

//    @Test
//    public void contextLoads() {
//        User user = userMapper.getUser(1L);
//        System.out.println(user);
//    }

}

如上是给redis数据库中增加了字符串类型的数据,运行,(注意:如果使用的是阿里云ECS产品,请务必在安全组开放一下redis端口号6379,不然怎么运行都是报错的,具体操作请参考:阿里云服务器安全组添加端口号

执行成功,查看一下:

3.3、获取数据:

控制台输出:

3.4、保存对象类型数据

以上操作,从数据库查询id为1的user对象保存到redis中(User实体类必须首先序列化接口,不然会报错,原因不懂的自行百度),操作成功后,我们查询一下数据库,

并没有数据,这是为什么呢?原来,如果是保存对象,会默认使用jdk的序列化机制,会将序列化之后的数据保存到redis中,包括我们设置的key值"user-01"也会被序列化,所以get "user-01"获取不到任何数据,那么怎么处理这种情况呢?

方法1:将数据以json的方式保存。

        (1)、自己将数据转化为json格式的数据保存

        (2)、将默认的jdk序列化机制改为json的序列化机制

这里着重讲一下第二种:

我们可以看一下RedisTemplate中的默认是jdk序列化机制:

下面就自己来创建RedisTemplate,复制一下RedisAutoConfirguration类中的RedisTemplate来改写一下针对User类的序列化器:

在config文件夹下创建MyRedisConfig类:

package com.example.cache.config;

import com.example.cache.domain.User;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;

import java.net.UnknownHostException;

/**
 * @author pavel
 * @date 2018/11/27 0027
 */
@Configuration
public class MyRedisConfig {

    @Bean
    public RedisTemplate<Object, User> redisTemplate(
            RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
        RedisTemplate<Object, User> template = new RedisTemplate<>();
        template.setConnectionFactory(redisConnectionFactory);
        // 设置一个序列化器
        Jackson2JsonRedisSerializer<User> serializer = new Jackson2JsonRedisSerializer(User.class);
        template.setDefaultSerializer(serializer);
        return template;
    }
}

然后在测试类引入这个自己设置的redisTemplate

运行,查看数据即可,如下,是RedisClient上查看的数据:

RedisClient的下载地址:RedisClient

 

好了 ,关于Spring Boot和Redis的整合使用就先学习这么多,下一篇学习整合Redis后使用Redis缓存管理器。

 

 

 

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/pavel101/article/details/84564268
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-01 17:52:30
  • 阅读 ( 1329 )
  • 分类:Redis

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢