springboot集成redis redis配置手把手交你不踩坑
前面我们已经介绍过redis的安装配置和使用以及一些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管理器里的数据