最近在b站学习redis,学到了springboot整合redis,本期待着up主教我怎么在springboot上整合虚拟机中的redis,up主无赖地 开启了windows下的redis,于是乎我自己便捣鼓了起来,使用docker摘取了redis镜像,通过端口映射出来,成功与自己的springboot项目整合起来,在此简单记录一下~
在docker中拉取redis镜像
- 先用xshell连上虚拟机
- 先开启docker(没有docker的小伙伴先去装一下,这里不做介绍哈)
sudo systemctl start docker #开启docker
sudo systemctl enable docker # 设置docker开机自启
- 拉取镜像
docker pull redis # 默认下载最新版本,想下载其他版本可自行设置
docker images # 下载完成后可以用此命令查看下载的镜像
- 为镜像创建容器并启动
- -d 表示在后台运行
- -p 进行端口映射,第一个值是宿主端口,第二个值是容器端口,为了进行后续配置的时候进行区分,两个端口不设置成同一个端口号,记住我们映射的主机端口是6378
docker run -d -p 6378:6379 redis
docker ps # 可查看当前进行中的容器
创建springboot项目并整合redis
- 创建springboot项目
都来学springboot整合redis怎么创建项目就不用多说了吧,只要注意在创建项目的时候,要勾选上一下Spring Data Redis
这一项,方便项目自动导入需要的依赖
如果项目已经创建,也可以pom文件里加上这个依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
- 简单介绍
可以先在idea通过ctrt n
指令查找一下RedisAutoConfiguration
这个类,内容如下,我们要获得的就是这个RedisTemplate
这个类的对象来实现在springboot项目中对redis进行操作
@Configuration(
proxyBeanMethods = false
)
@ConditionalOnClass({RedisOperations.class})
@EnableConfigurationProperties({RedisProperties.class})
@Import({LettuceConnectionConfiguration.class, JedisConnectionConfiguration.class})
public class RedisAutoConfiguration {
public RedisAutoConfiguration() {
}
@Bean
@ConditionalOnMissingBean(
name = {"redisTemplate"}
)
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
RedisTemplate<Object, Object> template = new RedisTemplate();
template.setConnectionFactory(redisConnectionFactory);
return template;
}
@Bean
@ConditionalOnMissingBean
public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
StringRedisTemplate template = new StringRedisTemplate();
template.setConnectionFactory(redisConnectionFactory);
return template;
}
}
现查看一下RedisProperties
这个类,看看在application.properties
中我们可以配置些什么,从以下内容中我们可以看到
- 在application.properties配置文件中我们要配置redis相关的东西,可以使用
spring.redis
开头,后面跟上对应要配的变量名 - redis中的部分变量已经有了默认的配置:使用0号数据库、host默认本机、端口默认6379
@ConfigurationProperties(
prefix = "spring.redis"
)
public class RedisProperties {
private int database = 0;
private String url;
private String host = "localhost";
private String password;
private int port = 6379;
private boolean ssl;
private Duration timeout;
private String clientName;
private RedisProperties.Sentinel sentinel;
private RedisProperties.Cluster cluster;
private final RedisProperties.Jedis jedis = new RedisProperties.Jedis();
private final RedisProperties.Lettuce lettuce = new RedisProperties.Lettuce();
public RedisProperties() {
}
//变量的getset方法就省略不贴出来了
}
- 进入application.properties配置文件进行配置
- 这里的host配置的是虚拟机的ip地址
- 这里的port配置的是映射的宿主端口
spring.redis.host=192.168.1.149
spring.redis.port=6378
- 进行简单测试
创建一个测试类,注入我们配置好了的redisTemplate
对象,简单地set一个值再get一下
@SpringBootTest
class DemoApplicationTests {
@Autowired
private RedisTemplate redisTemplate;
@Test
void contextLoads() {
redisTemplate.opsForValue().set("k1","v1");
System.out.println(redisTemplate.opsForValue().get("k1"));
}
}
大功告成