在现实开发中,我们往往会用到缓存,而缓存的话就会用到一些第三方的组件,SpringBoot也为我们提供了这些自动配置类,会帮助我们自动注入相关组件,我们只需要引入相关的starter
即可
引入pom.xml
的依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
之后要指定redis的服务端地址,这里就和配置数据库一样了,要在全局配置文件中进行配置。(注:因为测试缓存需要用到数据库,所以这里一并配置)
application.yaml:
spring:
datasource:
username: root
password: **********
url: jdbc:mysql://localhost:3306/demo
driver-class-name: com.mysql.cj.jdbc.Driver
redis:
host: 127.0.0.1 //这里是配置redis服务端的ip地址,本地的话写127.0.0。1或者localhost都可以
我们操作非结构化的数据时,都是以key-value的方式去操作它的,redis
也不例外。关于redis
的各种命令以及数据类型这里就不介绍了,可以查看它的中文官方文档
SpringBoot为咱们提供了RedisTemplate
类来专门操作redis
,看名字就知道,和JdbcTemplate
大致一样。它的键值对都是object类型的,也就是说可以放任意类型的值作为键值对。但有时候我们的键值对使用String类型的情况比较多,SpringBoot也为我们提供了专门的类StringRedisTemplate
,我们来看看一个简单的例子:
@Autowired
private StringRedisTemplate stringRedisTemplate;
@Test
public void textRedis(){
stringRedisTemplate.opsForValue().append("demo","hello world");
String demo = stringRedisTemplate.opsForValue().get("demo");
(这里说明一下opsForValue
方法是专门redis的字符串类型的,其他的数据类型,比如set-----opsForSet
、list-----opsForList
,其他同理),运行结果:
hello world
其他的数据类型也大致同理,根据方法命名即可猜出操作.
接下来看看RedisTemplate
,它的key-value可以存对象,可是它存储时用到的序列化器是jdk的序列化,我们可以存进去,但是redis的可视化工具里是看不出效果,我们想用json类型的方式来存储数据的话,就需要自己来去更换它了。有一个思路就是自己编写一个RedisTemplate
来替代默认配置的,并替换它的序列化器为json类型的序列化器。
编写一个配置类:
@Configuration
public class RedisConfiguration {
@Bean
public RedisTemplate<Object, User> redisTemplate(RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
RedisTemplate<Object, User> template = new RedisTemplate();
template.setConnectionFactory(redisConnectionFactory);
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<User>(User.class); //Jackson2JsonRedisSerializer是json类型的序列化器
template.setDefaultSerializer(jackson2JsonRedisSerializer); //设置序列化器
return template;
}
}
之后在编写测试代码:
@Autowired
private RedisTemplate<Object,User> redisTemplate;
@Test
public void textRedis(){
User user = new User();
user.setUsername("leslie");
user.setPassword("123");
redisTemplate.opsForSet().add("demo1",user);
Set<User> demo = redisTemplate.opsForSet().members("demo1");
System.out.println(demo);
// stringRedisTemplate.opsForValue().append("demo","hello world");
// String demo = stringRedisTemplate.opsForValue().get("demo");
// System.out.println(demo);
}
其中User
是我们自己编写的实体类,有三个属性(uid,username,password)
运行结果:
[User{uid=0, username='leslie', password='123'}]
这样缓存内的对象就可以以json方式保存了,但是现在只能保存User类型的对象,如果需要保存别的类型,只需要在泛型那儿修改就可以了.