Springboot集成Redis

美柚明治
2021-07-14 / 0 评论 / 24 阅读 / 正在检测是否收录...

Springboot集成Redis

描述:做一个html页面,一个下拉列表。数据先从redis中查询,如果redis里面没有,就去mysql里面查询。mysql查询到了之后就存到redis里面。

项目依赖

<!--        springboot-redis-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--        模板引擎-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!--        web支持-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--        springboot-mybatis-->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.2.0</version>
</dependency>
<!--        mysql链接驱动-->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>
<!--        懒狗必备-->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.62</version>
</dependency>

application.yml

注意点:

  • 我的mysql的版本是8.0,驱动类和5.7版本的有所不同,8.0还要加时区
  • 5.7:com.mysql.jdbc.Driver 8.0:com.mysql.cj.jdbc.Driver
  • mysql的密码需要单引号引起来。
spring:
  #  redis的配置
  redis:
    host: 192.168.23.222
    port: 6379
    jedis:
      pool:
        max-active: 8
        max-wait: -1ms
        max-idle: 500
        min-idle: 0
    lettuce:
      shutdown-timeout: 0ms
  #   mysql的配置
  datasource:
    username: root
    password: '0289'
    url: jdbc:mysql://hadoop01:3306/day?serverTimezone=UTC&characterEncoding=utf8&useUnicode=true&useSSL=true
    driver-class-name: com.mysql.cj.jdbc.Driver
# mybatis的配置,指定mapper文件的路径
mybatis:
  mapper-locations: classpath:mapper/*Mapper.xml

application..properties

因为使用了阿里云的springboot脚手架,这里配置文件是脚手架自动配置的,这里一并贴出来。

# 应用名称
spring.application.name=jedis
# THYMELEAF (ThymeleafAutoConfiguration)
# 开启模板缓存(默认值: true )
spring.thymeleaf.cache=true
# 检查模板是否存在,然后再呈现
spring.thymeleaf.check-template=true
# 检查模板位置是否正确(默认值 :true )
spring.thymeleaf.check-template-location=true
#Content-Type 的值(默认值: text/html )
spring.thymeleaf.content-type=text/html
# 开启 MVC Thymeleaf 视图解析(默认值: true )
spring.thymeleaf.enabled=true
# 模板编码
spring.thymeleaf.encoding=UTF-8
# 要被排除在解析之外的视图名称列表,⽤逗号分隔
spring.thymeleaf.excluded-view-names=
# 要运⽤于模板之上的模板模式。另⻅ StandardTemplate-ModeHandlers( 默认值: HTML5)
spring.thymeleaf.mode=HTML5
# 在构建 URL 时添加到视图名称前的前缀(默认值: classpath:/templates/ )
spring.thymeleaf.prefix=classpath:/templates/
# 在构建 URL 时添加到视图名称后的后缀(默认值: .html )
spring.thymeleaf.suffix=.html
# 应用服务 WEB 访问端口
server.port=8080

mysql创建脚本

-- ----------------------------
-- 创建省份表
-- ----------------------------
DROP TABLE IF EXISTS `province`;
CREATE TABLE `province` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `NAME` varchar(20) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

-- ----------------------------
-- 插入数据
-- ----------------------------
INSERT INTO `province` VALUES ('1', '北京');
INSERT INTO `province` VALUES ('2', '上海');
INSERT INTO `province` VALUES ('3', '广州');
INSERT INTO `province` VALUES ('4', '陕西');

pojo层

pojo文件夹下面创建一个实体类,类名:Province

@Data
@AllArgsConstructor
@NoArgsConstructor
@Component
public class Province {
    private String id;
    private String name;
}

service层

在service层创建一个接口PullListService

public interface PullListService {
    /**
     * service层的接口,调用mapper的方法
     *
     * @return
     */
    List<Province> selectAll();
}

service层接口的实现类PullListMapperServiceImpl

@Service
@SuppressWarnings("all")
public class PullListMapperServiceImpl implements PullListMapper {

    @Autowired
    PullListMapper pullListMapper;

    @Override
    public List<Province> selectAll() {
        return pullListMapper.selectAll();
    }
}

mapper层

在mapper层创建一个接口PullListMapper

public interface PullListMapper {
    /**
     * 从mysql里面查询全部的数据出来
     *
     * @return
     */
    List<Province> selectAll();
}

mapper层接口的实现类,但是这里并不是PullListMapperImpl,因为我们使用了mybatis,这里使用对应的xml就可以代替接口实现类了。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="top.rirui.jedis.mapper.PullListMapper">
    <select id="selectAll" resultType="top.rirui.jedis.pojo.Province">
        select *
        from day.province
    </select>
</mapper>

controller层

@Controller
@SuppressWarnings("all")
public class Index {

    @Autowired
    private RedisTemplate<String, String> redisTemplate;
    @Autowired
    private PullListMapperServiceImpl pullListMapperServiceImpl;

    @RequestMapping(value = "pullList", produces = "application/json;charset=utf-8")
    @ResponseBody
    public String pullList() {
        //先查询redis,然后在去数据库里面查找。
        //mapper还是得写,这里调用service,service在调用mapper
        //与前端的交互通过ajax去交互。

        //判断redis里面有没有
        Boolean province = redisTemplate.hasKey("province");
        if (province) {
            //如果存在redis里面,需要把redis里面的值给它拿出来。
            System.out.println("redis里面存在");
            return redisTemplate.opsForValue().get("province");
        } else {
            System.out.println("不存在");
            //不存在于redis里面,所以需要去mysql里面查询
            List<Province> provincesList = pullListMapperServiceImpl.selectAll();
            String list = JSONObject.toJSONString(provincesList);
            redisTemplate.opsForValue().set("province", list);
            return list;
        }
    }
}

前端页面

创建一个html页面,前后端数据交互的格式是Json,使用ajax来传递参数。

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>下拉菜单</title>
    <script src="https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js"></script>
    <script>
        $(function () {
            $.ajax({
                type: 'post',
                url: '/pullList',
                success: function (data) {
                    console.log('请求ajax返回的结果' + data)
                    var province = $("#province");
                    for (let i = 0; i < data.length; i++) {
                        console.log(data[i].id)
                        var option = "<option name='" + data[i].id + "'>" + data[i].name + "</option>";
                        province.append(option)
                    }
                }
            })
        })
    </script>
</head>
<body>
<select id="province">
</select>
</body>
</html>

简单总结

Spring 封装了 RedisTemplate 来操作 Redis,它支持所有的 Redis 原生的 API。在 RedisTemplate 中定义了对5种数据结构的操作方法。

  • opsForValue():操作字符串。
  • opsForList():操作列表。
  • opsForHash():操作哈希。
  • opsForSet():操作集合。
  • opsForZSet():操作有序集合。

不仅仅RedisTemplate,还有StringRedisTemplate,需要用到的时候可以具体百度一下,这个文章只是记录最简单的操作。

好文章推荐

https://blog.csdn.net/pan_junbiao/article/details/108882001

https://blog.csdn.net/lydms/article/details/105224210

5

打赏

海报

正在生成.....

评论 (0)

取消