文章使用版本为 Spring Boot 2.1.x
前言
Redis 是一个高性能的key-value数据库,与其他 key - value 缓存产品有以下三个特点:
- Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
- Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
- Redis支持数据的备份,即master-slave模式的数据备份。
相信大家平时工作中也会用到Redis,那么怎么在Spring Boot中使用呢?
配置Redis
在Spring Boot中使用Redis非常简单,只需要在application.yml
中配置Redis数据库的地址就可以了。
spring:
redis:
host: localhost
port: 6379
password:
database: 0
其实看RedisProperties
源码你就可以知道,其实只要我们通过maven引入spring-boot-starter-data-redis
,Spring Boot就会默认连接上述配置的Redis,如果连不上就会报错。
通过看RedisAutoConfiguration
的源码我们可以看到,Spring Boot自动帮我们配置了2个Bean,RedisTemplate<Object, Object>
、StringRedisTemplate
。
@Configuration
protected static class RedisConfiguration {
@Bean
@ConditionalOnMissingBean(name = "redisTemplate")
public RedisTemplate<Object, Object> redisTemplate(
RedisConnectionFactory redisConnectionFactory)
throws UnknownHostException {
RedisTemplate<Object, Object> template = new RedisTemplate<Object, Object>();
template.setConnectionFactory(redisConnectionFactory);
return template;
}
@Bean
@ConditionalOnMissingBean(StringRedisTemplate.class)
public StringRedisTemplate stringRedisTemplate(
RedisConnectionFactory redisConnectionFactory)
throws UnknownHostException {
StringRedisTemplate template = new StringRedisTemplate();
template.setConnectionFactory(redisConnectionFactory);
return template;
}
}
测试
package org.schhx.springbootlearn.dao;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.schhx.springbootlearn.module.User;
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;
import java.util.UUID;
import java.util.concurrent.TimeUnit;
@RunWith(SpringRunner.class)
@SpringBootTest
public class RedisTemplateTest {
@Autowired
StringRedisTemplate stringRedisTemplate;
@Autowired
RedisTemplate redisTemplate;
@Test
public void save() throws Exception {
String key = UUID.randomUUID().toString();
String value = UUID.randomUUID().toString();
stringRedisTemplate.opsForValue().set(key, value);
stringRedisTemplate.expire(key, 5, TimeUnit.SECONDS);
Assert.assertEquals(value, stringRedisTemplate.opsForValue().get(key));
Thread.sleep(5000);
Assert.assertEquals(null, stringRedisTemplate.opsForValue().get(key));
}
@Test
public void saveObject() throws Exception {
String key = UUID.randomUUID().toString();
User user = new User().setName("张三").setAge(20);
redisTemplate.opsForValue().set(key, user);
redisTemplate.expire(key, 5, TimeUnit.SECONDS);
Assert.assertEquals(user, redisTemplate.opsForValue().get(key));
Thread.sleep(5000);
Assert.assertEquals(null, redisTemplate.opsForValue().get(key));
}
}
后记
大家有没有发现整个过程非常简单,只要两步就可以了
- 通过maven引入
spring-boot-starter-data-redis
- 在application中配置Redis地址
然后我们就可以愉快的使用redisTemplate了,当然你也可以在redisTemplate的基础上进一步封装。