这里是一个学习过程笔记的汇总:Spring Boot学习汇总
前面一篇已经学习了Spring Boot与缓存,今天就来看看Spring Boot中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缓存管理器。