SpringBoot集成Redis的操作流程

首先对于SpringBoot集成Redis,我们需要在pom.xml文件中引入启动redis所需要的依赖如下所示:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <!--spring2.X集成redis需要引入commos-pool2-->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-pool2</artifactId>
            <version>2.6.0</version>
        </dependency>

引入依赖后,我们还需要在application.yml文件中配置对应的ip和端口号的配置,如下所示。我们将redis微服务在7052端口启动,并将redis这个微服务注册到nacos上。我们还设置了redis运行的ip地址,端口号,数据库,超时时间,以及最大连接数,最大阻塞等待时间,最大空闲连接等参数。

server:
  port: 7052
spring:
  profiles:
    active: development
  redis:
    host: ***.***.***.***
    port: 6379
    database: 0
    timeout: 10000
# 设置lettuce参数
    lettuce:
      pool:
# 最大连接数,这里默认的是8
        max-active: 20
# 最大阻塞等待时间(使用负值表示没有限制) 默认为-1
        max-wait: -1
# 最大空闲连接 默认为8
        max-idle: 8
        min-idle: 0
  # 最小空闲连接 默认为0
  application:
    name: server-redis
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848

在yml文件中配置了redis后,此时启动会报错,因为我们在项目中引入redis是做缓存的作用,此时没有引入MySql数据库,但是启动redis之后还是会加载数据库需要使用的一些类,因此会报错。若想要解决报错需要在@SpringBootApplication这启动注解中加上exclude=DataSourceAutoConfiguration.class即可排除这个报错。

后端redis配置已经完成,我们需要在服务器或者本机上启动redis,对于redis的启动有三种方式,第一种方式是在redis的src目录下运行redis-server即可启动redis。第二种方式是redis-server -port 8888,此时是指定启动的端口。第三种方式是使用./src/redis-server redis.conf命令,以自定义的redis的conf文件启动redis。该三种方式可以实现redis的灵活启动。

Spring封装了RedisTemplate对象来进行对redis的各种操作,他支持所有redis原生的api。RedisTemplate中定义了对5种数据结构操作。

redisTemplate.opsForValue();//操作字符串
redisTemplate.opsForHash();//操作hash
redisTemplate.opsForList();//操作list
redisTemplate.opsForSet();//操作set
redisTemplate.opsForZSet();//操作有序set

RedisTemplate除了上述操作数据结构的方法外,还有很多其他的方法。例如,可以使用RedisTemplate.hasKey(key)判断是否有key所对应的值,有则返回true,没有则返回false。

RedisTemplate.delete(key)方法可以删除单个key值。

RedisTemplate.delete(keys)方法可以批量删除key,其中keys为Collection<K> keys

RedisTemplate.dump(key)方法可以将当前传入的key值序列化为byte[]类型。

我们使用Fegin注入product这个微服务,这 个微服务可以查询mysql数据库中所存储的产品的数据。

我们以根据产品id获取产品信息的方式测试redis缓存的使用,具体的代码如下testRedis所示。首先先使用redisTemplate.hasKey(sid)判断这个键是否在redis中,如果在的话们就使用redisTemplate.opsForValue().get(sid)根据键获取对应的redis中的值。如果不存在就使用redisTemplate.opsForValue().set(sid, product.toString())将该键和值放入到redis缓存中。

    @RequestMapping("/get")
    public String testRedis(@RequestParam("id") Integer id){
        String sid=id+"";
        if(redisTemplate.hasKey(sid)){
            System.out.println("*****************************");
            String res=(String) redisTemplate.opsForValue().get(sid);
            System.out.println(res);
            return res;
        }else{
            Product product=productService.findByPid(id);
            //设置值到redis
            redisTemplate.opsForValue().set(sid, product.toString());
            //从redis中获取值
            String res=(String) redisTemplate.opsForValue().get(sid);
            System.out.println(res);
            return res;
        }
    }

我们在前端使用URL两次访问该方法,对于前端传来的URL,如果是从缓存中查询,那么我们打印一串*********,然后打印查询到的数据,如果是从数据库中查询,我们直接打印查询到的数据。控制台输出的结果如下所示,可以看到第一次查询的时候没命中缓存,从数据中查询数据后将数据加入到缓存中,第二次再进行查询时,命中了redis缓存。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值