简单使用redis实现对数据进行缓存 redis缓存 redis简单使用 springboot mybaties-plus

1.使用redis缓存数据库中的一些数据

	这只是简单使用:
	准备条件:
		1).开发环境 :win7 
		2)开发工具 :IDE
		3)技术框架:SpringBoot+mybaties-plus+redis+mysql
		4) linux:centOs 

进入主题:

  1. 新建一个springBoot项目;(这里网络有很多)
  2. 在pom.xml中添加依赖;
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.1</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.yang</groupId>
    <artifactId>redis-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>redis-demo</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
     <!--添加jdbc-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jdbc</artifactId>
        </dependency>

        <!--添加web依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
        
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.4</version>
        </dependency>
        <dependency>
          <!--添加Springboot整合mybaties-plus-->
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.2.0</version>
        </dependency>
<!--添加mysql 连接驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <!--spring整合redis -->
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
        </dependency>
        <!--提供了在srping应用中通过简单的配置访问redis服务api-->
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-redis</artifactId>
        </dependency>
         <!--提供POJO的getter/setter/toString;等-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>
  1. 修改配置文件application.properties重命名为application.yml ,将127.0.0.1 地址改为自己数据库安装的地址,将“bookstore” 改为自己的连接的数据库名称 ,username和password 分别改为自己连接数据库时的用户名和密码。
#配置服务
server:
  port: 8081
  servlet:
    context-path: /
spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/bookstore?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true
    username: root
    password: root

#mybatis-plush配置
mybatis-plus:
  #定义别名包
  type-aliases-package: com.yang.pojo
  #加载Mapper映射文件
  mapper-locations: classpath:/mybatis/mappers/*.xml
  #开启驼峰映射
  configuration:
    map-underscore-to-camel-case: false
# 添加日志信息
logging:
  level:
    com.jt.mapper: debug
  1. pojo类的编写
    在com.yang.pojo包下创建Address类,这个需要如不用lombok这个jar包,就自己生成对应get/set/toString/equals/无参构造/全参构造等方法
package com.yang.pojo;

import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.*;
import lombok.experimental.Accessors;

/**
 * @author 杨
 * @Date 项目创建日期为 2021/1/7
 * @copyright 项目版权归作者所有
 */
@Data //@Setter ,@Getter ,@ToString
@NoArgsConstructor   //无参构造
@AllArgsConstructor   //全参构造
@TableName(value = "address")  //1.关联表名 有了这个可以不用写对应mapper.xml映射文件了
@Accessors(chain = true) //实现链式加载
public class Address {
    //对象与数据表要完美映射  对象名称与表名  对象的属性与表的字段
    //注意对象使用包装类型
    @TableId
    private String address_areaId;
    private String address_name;
    private String address_regionId;

}
  1. mapper接口的编写。
    注意:假如我们的启动类在com.yang 这个包下。
    在com.yang.mapper包小创建AddressMapper 接口并且继承 BaseMapper
    接口,接口不需要写任何的方法,因为我们使用mybaties-plus这个架包。
package com.yang.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yang.pojo.Address;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

@Mapper
public interface AddressMapper extends BaseMapper<Address> {
    
}
  1. 在com.yang.service包下创建AddressService接口
package com.yang.service;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.yang.pojo.Address;
import java.util.List;

/**
 * MP :代表mybaties-plus
 */
public interface AddressService {
   
    List<Address> listMP();//使用MP用法
    List<Address> listRedisCache() throws JsonProcessingException;//使用redis进行缓存
}
  1. 在com.yang.service.impl包下创建AddressServiceImpl 并且实现AddressService接口
package com.yang.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yang.mapper.AddressMapper;
import com.yang.pojo.Address;
import com.yang.service.AddressService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import redis.clients.jedis.Jedis;

import java.util.List;

/**
 * @author yang
 * @Date 项目创建日期为 2021/1/7
 * @copyright 项目版权归作者所有
 */
@Service
public class AddressServiceImpl implements AddressService {

    @Autowired
    private AddressMapper addressMapper;
    @Override
    public List<Address> listMP() {//从数据库查询数据
        IPage<Address> ipage =new Page<>(0,20);//使用MP提供的IPage进行分页查询
        QueryWrapper<Address> queryWrapper=new QueryWrapper<>();
        queryWrapper.orderByAsc("address_areaId");//查询降序
        IPage<Address> selectPage = addressMapper.selectPage(ipage, queryWrapper);//
        List<Address> addressList= selectPage.getRecords();//获取查询到前20 条数据
        return addressList;

    }

    @Override
    public List<Address> listRedisCache() throws JsonProcessingException {
        System.out.println("");
        String host="192.168.126.129";//虚拟机ip地址
        int port=6379;//redis 服务默认端口
        String key="list";//声明redis set(key,value)中的key
        Jedis jedis=new Jedis(host, port);//简单创建一个连接虚拟机redis实例
          /**
         * 这个类有两个方法
         * readValue() //将JSON转化为对象     反射思想
         * writeValueAsString()//将对象转化为JSON
         */
        ObjectMapper objectMapper=new ObjectMapper();//这个类可以
        List<Address> list=null;
        if (jedis.exists(key)){
            System.out.println("使用redis缓存的数据");
            String value=jedis.get(key);//如redis中已经缓存了这些数据,这直接从redis中拿数据,就不需要到数据库中取了。这里的key不做变化,只是简单使用
             //将JSON转化为对象     反射思想
            list = objectMapper.readValue(value, List.class);
        }else {
            System.out.println("使用查询到数据库的数据");
            list=listMP();//获取从数据库查询出来的分页数据
            //将对象转化为JSON
            String json = objectMapper.writeValueAsString(list);
            jedis.set(key, json);
        }
        return list;
    }
}
  1. 配置查询拦截类(实现分页辅助类)
    在com.yang.config包下创建MybatisPlusConfig类
package com.yang.config;

import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author 杨
 * @Date 项目创建日期为 2021/1/8
 * @copyright 项目版权归作者所有
 */
@Configuration
public class MybatisPlusConfig {

    @Bean
    public PaginationInterceptor paginationInterceptor(){
        return new PaginationInterceptor();
    }
}
  1. 控制类的实现
    在com.yang.controller包下创建AddresController 类
package com.yang.controller;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.yang.pojo.Address;
import com.yang.service.AddressService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * @author 杨
 * @Date 项目创建日期为 2021/1/7
 * @copyright 项目版权归作者所有
 */
@RestController
@RequestMapping("/addr")
public class AddresController {

    @Autowired
    private AddressService addressService;

 
    @RequestMapping("/listMP")
    public List<Address> listMP() throws JsonProcessingException {
//        return addressService.listMP();
        return addressService.listRedisCache();
    }
 }
  1. 启动我们虚拟机中redis服务
    命令:
redis-server redis.conf

在这里插入图片描述
a)查看是否启动成功
命令:ps -ef|grep redis 出现下表示启动成功
在这里插入图片描述
11. 在浏览器中输入 http://localhost:8081/addr/listMP 路径后回车
在这里插入图片描述
第一次数据是从数据库中拿到的数据:
在这里插入图片描述
12. 再次刷新浏览器地址时:
在这里插入图片描述
这是从redis缓存中取数据,此时不再去查询数据库:
我们查看下redis缓存中缓存key,和value
在这里插入图片描述

可以看到数据已经缓存到redis中了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值