准备工作
咱这里不讲Redis的安装,博客找一找,翻一翻就搞定了,在这里说提一嘴,我在装Redis的时候没给虚拟机联网,导致使用yum下载gcc的时候报错,说是没找到库啥的,我以为是我的yum源的问题,搞了好久…
这里放上一篇Redis的安装教程,有兴趣的小伙伴可以看一下:
https://www.cnblogs.com/heqiuyong/p/10463334.html
开始
1.添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>2.6.1</version>
</dependency>
2.application.yaml中配置
redis:
host: redis所在服务器ip
port: 6379
database: 0
timeout: 5000
//password:
lettuce:
pool:
max-active: 20
max-wait: -1
max-idle: 5
min-idle: 0
注意:我的redis没有设置密码,有密码的小伙伴还要加上password
3.添加redis配置类
@EnableCaching
@Configuration
public class RedisConfig extends CachingConfigurerSupport {
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
RedisTemplate<String, Object> template = new RedisTemplate<>();
RedisSerializer<String> redisSerializer = new StringRedisSerializer();
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
template.setConnectionFactory(factory);
//key序列化方式
template.setKeySerializer(redisSerializer);
//value序列化
template.setValueSerializer(jackson2JsonRedisSerializer);
//value hashmap序列化
template.setHashValueSerializer(jackson2JsonRedisSerializer);
return template;
}
@Bean
public CacheManager cacheManager(RedisConnectionFactory factory) {
RedisSerializer<String> redisSerializer = new StringRedisSerializer();
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
//解决查询缓存转换异常的问题
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
// 配置序列化(解决乱码的问题),过期时间600秒
RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
.entryTtl(Duration.ofSeconds(600))
.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer))
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer))
.disableCachingNullValues();
RedisCacheManager cacheManager = RedisCacheManager.builder(factory)
.cacheDefaults(config)
.build();
return cacheManager;
}
这些基本都是固定代码,不需要改变
4.接下来该在虚拟机里操作了
- 修改redis.conf,要使用su进入超级管理员
- 找到redis/bin/redis.conf(redis的配置文件)
键入vim redis.conf 进入配置文件
现在是只读状态,修改的话键入“i”,就可以修改了
找到 bind 127.0.0.1注释掉,protected-mode yes 改为 no
然后按Esc 再按下 “:” ,输入 “wq” 保存并退出,可能会出现当前文件为只读状态,真出现了在百度好了
-
查看虚拟机ip(系统工具–设置–网络)
然后可以尝试一下在主机用cmd去ping虚拟机ip
我一开始没关过防火墙的时候,貌似没ping通,现在防火墙开着也ping通了,有点奇怪
可以先试着启动springboot试一下,不行在关防火墙 -
写个测试类试一下
@RestController @RequestMapping("/redisTest") public class RedisTestController { @Autowired RedisTemplate redisTemplate; @GetMapping public String testRedis() { //设置值到redis redisTemplate.opsForValue().set("name", "你大爷"); String name = (String) redisTemplate.opsForValue().get("name"); return name; }
然后发送请求试一下,如果说连接超时,就去把防火墙关了
-
关闭防火墙
直接关闭可能会出现:Failed to start firewalld.service: Unit not found.
可以通过下面方法解决:- yum install firewalld //试一下是否安装了firewalld
- systemctl unmask firewalld
- systemctl enable firewalld
- systemctl start firewalld
上面依此执行完就可以关闭了
systemctl start firewalld.service //开启防火墙 systemctl stop firewalld.service //关闭防火墙 systemctl enable firewalld.service //设置开机自动启动 systemctl disable firewalld.service //设置关闭开机制动启动 firewall-cmd --reload //在不改变状态的条件下重新加载防火墙
最后在发送请求试一下: