SpringCloud 大型系列课程正在制作中,欢迎我们关注与提意见。

程序员每天的CV 与 板砖,也要知其所以然,本系列课程能够协助初学者学习 SpringBooot 项目开发 与 SpringCloud 微服务系列项目开发

1 项目准备

  • 创立SpringBoot根底项目
  • SpringBoot项目集成mybatis
  • SpringBoot 集成 Druid 数据源【SpringBoot系列3】
  • SpringBoot MyBatis 完结分页查询数据【SpringBoot系列4】
  • SpringBoot MyBatis-Plus 集成 【SpringBoot系列5】
  • SpringBoot mybatis-plus-generator 代码生成器 【SpringBoot系列6】
  • # SpringBoot MyBatis-Plus 分页查询 【SpringBoot系列7】

运用 Redis ,首先要装置,能够参考这儿www.runoob.com/redis/redis…
我这儿是经过docker-compose来装置的,目录结构如下,你能够在一个目录下定义 data 、logs 目录。

SpringBoot 集成Redis缓存 以及实现基本的数据缓存【SpringBoot系列8】

然后创立 redis.conf 文件

#敞开远程可衔接
#bind 127.0.0.1
#自定义暗码
requirepass 12345678
#指定 Redis 监听端口(默许:6379)
port 6379
#客户端搁置指定时长后封闭衔接(单位:秒。0:封闭该功能)
timeout 0
# 900s内假如至少一次写操作则履行bgsave进行RDB耐久化操作
save 900 1
# 在300s内,假如至少有10个key进行了修正,则进行耐久化操作
save 300 10
#在60s内,假如至少有10000个key进行了修正,则进行耐久化操作
save 60 10000
#是否紧缩数据存储(默许:yes。Redis选用LZ 紧缩,假如为了节省 CPU 时刻,能够封闭该选项,但会导致数据库文件变的巨大)
rdbcompression yes
#指定本地数据文件名(默许:dump.rdb)
dbfilename dump.rdb
#指定本地数据文件寄存目录
dir /data
#指定日志文件位置(假如是相对路径,redis会将日志寄存到指定的dir目录下)
logfile "redis.log"

然后编写 docker-compose.yml

version: "3.2"
services:
  redis:
    image: redis:6.2.6
    container_name: redis-6379
    restart: always
    volumes:
      - ./redis.conf:/etc/redis/redis.conf:ro
      - ./data:/data
      - ./logs:/logs
    command: redis-server /etc/redis/redis.conf
    ports:
      - "6378:6379"

然后在当时目录下翻开终端,履行命令

docker-compose up -d

SpringBoot 集成Redis缓存 以及实现基本的数据缓存【SpringBoot系列8】
其他命令

docker stats redis-6379

然后检查是否履行成功,检查docker 容器

docker ps

SpringBoot 集成Redis缓存 以及实现基本的数据缓存【SpringBoot系列8】

检查redis 的内存与CPU

docker stats redis-6379

SpringBoot 集成Redis缓存 以及实现基本的数据缓存【SpringBoot系列8】
封闭 redis

 docker stop redis-6379

2 SpringBoot 中集成 Redis

pom.xml 中增加依赖

  <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-redis -->
  <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-redis</artifactId>
      <version>2.7.9</version>
  </dependency>
  <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-pool2 -->
  <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-pool2</artifactId>
      <version>2.11.1</version>
  </dependency>
  <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
  <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-lang3</artifactId>
      <version>3.11</version>
  </dependency>

Spring Boot结构中现已集成了redis,在1.x.x的版别中默许运用jedis客户端,而在2.x.x版别中默许运用的lettuce客户端。 本项目运用的 SpringBoot 2.7.9 版别 ,所以选用lettuce来进行装备。

在 application.yml 中增加Redis装备信息:

spring:
  redis:
    database: 0  # Redis数据库索引(默许为0)
    host: localhost # Redis服务器地址
    port: 6379  # Redis服务器衔接端口
    password:   # Redis服务器衔接暗码(默许为空)
    lettuce:
      pool:
       max-active: 8  # 衔接池最大衔接数(运用负值表明没有限制) 默许 8
       max-wait: -1   # 衔接池最大阻塞等待时刻(运用负值表明没有限制) 默许 -1
       max-idle: 8    # 衔接池中的最大空闲衔接 默许 8
       min-idle: 0    # 衔接池中的最小空闲衔接 默许 0

增加一个Redis装备类,运用@EnableCaching注解来敞开缓存

import java.lang.reflect.Method;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cache.interceptor.KeyGenerator;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport{
    @Bean
    public KeyGenerator keyGenerator() {
        return new KeyGenerator() {
            @Override
            public Object generate(Object target, Method method, Object... params) {
                StringBuilder sb = new StringBuilder();
                sb.append(target.getClass().getName());
                sb.append(method.getName());
                for (Object obj : params) {
                    sb.append(obj.toString());
                }
                return sb.toString();
            }
        };
    }
}

然后创立一个 RedisController 来测验

import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Api(tags="Redis 测验运用")
@RestController()
@RequestMapping("/redis")
@Slf4j
public class RedisController {
    @Autowired
    private StringRedisTemplate stringRedisTemplate;
    @Autowired
    private RedisTemplate redisTemplate;
    @GetMapping("/testString")
    public String testString()  {
        log.info("redis 开端保存值  ");
        stringRedisTemplate.opsForValue().set("name", "早上的年轻人");
        log.info("redis 保存完结  ");
        String name = stringRedisTemplate.opsForValue().get("name");
        return "redis 中取出的值是  " + name ;
    }
}

SpringBoot 集成Redis缓存 以及实现基本的数据缓存【SpringBoot系列8】

保存用户目标信息

@Api(tags="Redis 测验运用")
@RestController()
@RequestMapping("/redis")
@Slf4j
public class RedisController {
    @Autowired
    private RedisTemplate redisTemplate;
    @GetMapping("/getUser")
    public String testGetUser()  {
        ValueOperations<String, UserInfo> operations = redisTemplate.opsForValue();
        UserInfo userInfo = operations.get("sys.user");
        if(userInfo==null){
            return "未查询到用户";
        }
        return userInfo.toString();
    }
    @GetMapping("/saveUser")
    public String testSaveUser()  {
        UserInfo user = new UserInfo();
        user.setUserName("早上的年轻人");
        user.setUserAge(30);
        ValueOperations<String, UserInfo> operations = redisTemplate.opsForValue();
        //保存数据
        operations.set("sys.user", user);
        // 设置10秒后过期
        operations.set("sys.user", user, 10, TimeUnit.SECONDS);
        return "保存用户信息成功";
    }
}

postman 调用 保存用户的接口

SpringBoot 集成Redis缓存 以及实现基本的数据缓存【SpringBoot系列8】
然后运用 RDM 客户端检查 redis 库
SpringBoot 集成Redis缓存 以及实现基本的数据缓存【SpringBoot系列8】
然后过 10 秒后刷新一下,用户缓存数据已铲除
SpringBoot 集成Redis缓存 以及实现基本的数据缓存【SpringBoot系列8】
@Cacheable注解缓存,先查询缓存,有就直接回来,无就履行方法查询,然后将查询成果回来并保存到缓存中


import org.springframework.cache.annotation.Cacheable;
@Api(tags="Redis 测验运用")
@RestController()
@RequestMapping("/redis")
@Slf4j
public class RedisController {
    @GetMapping("/getUser")
    @Cacheable(value="user-key")
    public UserInfo getUser() {
        log.info("履行数据库查询用户");
        UserInfo user = new UserInfo();
        user.setUserName("早上的年轻人");
        user.setUserAge(30);
        return user;
    }
}

项目源码在这儿 :gitee.com/android.lon… 有爱好能够关注一下公众号:biglead

本文正在参与「金石方案」