springboot集成redis redis配置手把手交你不踩坑
前面我们已经介绍过redis的安装配置和使用以及一些redis的基本概念,如果还有小伙伴不太熟悉的话可以翻翻我之前的博客1.初识redis从这篇博客开始看,看完这几篇以后相信你对Redis的概念会有一定的提升,我们了解完了redis的概念和基本使用,接下来我们来讨论一下怎么使用springboot集成redis。一,集成redis的方式首先我们要在自己的本机电脑或者服务器上安装一个redis的服务
前面我们已经介绍过redis的安装配置和使用以及一些redis的基本概念,如果还有小伙伴不太熟悉的话可以翻翻我之前的博客
1.初识redis
从这篇博客开始看,看完这几篇以后相信你对Redis的概念会有一定的提升,我们了解完了redis的概念和基本使用,接下来我们来讨论一下怎么使用springboot集成redis。
一,集成redis的方式
首先我们要在自己的本机电脑或者服务器上安装一个redis的服务器,通过我们的idea在程序中进行集成,然后通过idea完成对redis的增删改查操作。在springBoot中更常见的方式是集成spring-data-redis,这是spring提供的一个专门用来操作redis的项目,封装了对redis的常用操作,里边主要封装了jedis和lettuce两个客户端。今天我们来讲讲怎么使用lettuce客户端以及集成的时候容易踩的一些坑(这些坑都是我一步一步踩出来的😢)
二,集成步骤
1.创建一个maven项目并添加redis依赖
<!-- redis采用lettuce做客户端,lettuce需要配置线程池-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
<!-- redsi依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
注意:这里除了spring-boot-starter-data-redis还是要添加commons-pool2,这个不能少!!!
项目中引用的spring-boot-starter-data-redis默认是采用 lettuce作为redis的客户端, 而lettuce 底层又采用 netty实现,lettuce的使用需要配置线程池。
如果不添加commons-pool2依赖就会报错:编译时JVM加载不到类或者找不到类
2.redis文件配置
#redis主机地址(如果你在本地启动就是127.0.0.1,如果在虚拟机就填你虚拟机的地址)
spring.redis.host=192.168.128.100
#redis端口(默认6379)
spring.redis.port=6379
#redsi服务器密码(如果没有密码默认为空)
spring.redis.password=
#连接池最大连接数
spring.redis.lettuce.pool.max-active=8
#最大阻塞等待时间(-1表示没有限制)
spring.redis.lettuce.pool.max-wait=-1
#最大空闲连接
spring.redis.lettuce.pool.min-idle=8
#最小空闲连接
spring.redis.jedis.pool.min-idle=0
#连接超时时间ms
spring.redis.timeout=30000
3.写一个redis配置类RedisConfig
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory redisConnectionFactory){
RedisTemplate<String,Object> redisTemplate = new RedisTemplate<>();
//key序列化
redisTemplate.setKeySerializer(new StringRedisSerializer());
//value序列化
redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
//hash类型key序列化
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
//hash类型value序列化
redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
//注入连接工厂
redisTemplate.setConnectionFactory(redisConnectionFactory);
return redisTemplate;
}
}
注意:这个配置类不能少,不然对redis数据做increment操作会报错ERR value is not an integer or out of range,我们这个配置类使用GenericJackson2JsonRedisSerializer是先将对象转为json,然后再保存到redis,不然我们存入redis的key-value就是一串乱码,无法进行increment操作
使用序列化器以后将字符串的值直接转为字节数组,所以保存到redis中是数字,所以可以进行加1 ;
4.业务书写
写一个controller类
@RestController
@RequestMapping("/test")
public class TestController {
@Autowired
private RedisTemplate redisTemplate;
@RequestMapping("/")
public String redisTest(){
String str = "这是一条测试消息!!!";
//向redis存入消息
redisTemplate.opsForValue().set("msg",str);
//取出redis中的消息并返回
return redisTemplate.opsForValue().get("msg").toString();
}
}
redis管理器里的数据
小伙伴们关注一波我们一起学习吧!
更多推荐
所有评论(0)