前面我们已经介绍过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管理器里的数据
在这里插入图片描述

小伙伴们关注一波我们一起学习吧!

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐