来源:素文宅博客
地址:blog.yoodb.com/yoodb/artic…
Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
Redis是一个高性能的key-value内存数据库,通常被称为数据结构服务器,因为值可以是字符串、哈希、列表、集合和有序集合等类型,在如今系统不断追求高并发、高效率的大环境下,Redis被广泛使用。
本文在前一篇“Spring Boot从入门到精通(四)连接MySQL数据库(附源码)”文章中的项目源码基础上(关注“Java精选”微信公众号,切换至后台->聚合->开源项目,可以查看Spring Boot系列框架从入门到精通教程)。
通过查询MySQL数据库中表数据存储到Redis缓存中,之后再使用Redis查询数据返回参数呈现到浏览器上,利用Spring Boot框架集成Redis实现缓存机制,分享给大家参考和学习。
Maven项目pom.xml文件
在Spring Boot项目中pom.xml文件配置信息如下:
| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 | <?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.3.0.M2<``/version``>`` ``<relativePath/> <!-- lookup parent from repository -->`` ``<``/parent``>`` ``<groupId>com.yoodb<``/groupId``>`` ``<artifactId>springboot-study-demo04<``/artifactId``>`` ``<version>0.0.1-SNAPSHOT<``/version``>`` ``<packaging>war<``/packaging``>`` ``<name>springboot-study-demo04<``/name``>`` ``<description>Demo project ``for Spring Boot<``/description``> ``<properties>`` ``<java.version>1.8<``/java``.version>`` ``<``/properties``> ``<dependencies>`` ``<dependency>`` ``<groupId>org.mybatis.spring.boot<``/groupId``>`` ``<artifactId>mybatis-spring-boot-starter<``/artifactId``>`` ``<version>1.0.0<``/version``>`` ``<``/dependency``>`` ``<dependency>`` ``<groupId>org.springframework.boot<``/groupId``>`` ``<artifactId>spring-boot-starter-data-redis<``/artifactId``>`` ``<``/dependency``>`` ``<dependency>`` ``<groupId>mysql<``/groupId``>`` ``<artifactId>mysql-connector-java<``/artifactId``>`` ``<``/dependency``>`` ``<dependency>`` ``<groupId>org.springframework.boot<``/groupId``>`` ``<artifactId>spring-boot-starter-jdbc<``/artifactId``>`` ``<``/dependency``> ``<dependency>`` ``<groupId>org.springframework.boot<``/groupId``>`` ``<artifactId>spring-boot-starter-web<``/artifactId``>`` ``<``/dependency``> ``<dependency>`` ``<groupId>org.springframework.boot<``/groupId``>`` ``<artifactId>spring-boot-starter-tomcat<``/artifactId``>`` ``<scope>provided<``/scope``>`` ``<``/dependency``>`` ``<dependency>`` ``<groupId>org.springframework.boot<``/groupId``>`` ``<artifactId>spring-boot-starter-``test``<``/artifactId``>`` ``<scope>``test``<``/scope``>`` ``<exclusions>`` ``<exclusion>`` ``<groupId>org.junit.vintage<``/groupId``>`` ``<artifactId>junit-vintage-engine<``/artifactId``>`` ``<``/exclusion``>`` ``<``/exclusions``>`` ``<``/dependency``>`` ``<dependency>`` ``<groupId>org.springframework.boot<``/groupId``>`` ``<artifactId>spring-boot-starter-jdbc<``/artifactId``>`` ``<``/dependency``>`` ``<dependency>`` ``<groupId>org.xmlunit<``/groupId``>`` ``<artifactId>xmlunit-core<``/artifactId``>`` ``<``/dependency``>`` ``<``/dependencies``> ``<build>`` ``<plugins>`` ``<plugin>`` ``<groupId>org.apache.maven.plugins<``/groupId``>`` ``<artifactId>maven-surefire-plugin<``/artifactId``>`` ``<configuration>`` ``<skip>``true``<``/skip``>`` ``<``/configuration``>`` ``<``/plugin``>`` ``<plugin>`` ``<groupId>org.springframework.boot<``/groupId``>`` ``<artifactId>spring-boot-maven-plugin<``/artifactId``>`` ``<``/plugin``>`` ``<``/plugins``>`` ``<resources>`` ``<resource>`` ``<directory>src``/main/resources``<``/directory``>`` ``<includes>`` ``<include>**/**<``/include``>`` ``<``/includes``>`` ``<``/resource``>`` ``<``/resources``>`` ``<``/build``> ``<repositories>`` ``<repository>`` ``<``id``>spring-milestones<``/id``>`` ``<name>Spring Milestones<``/name``>`` ``<url>https:``//repo``.spring.io``/milestone``<``/url``>`` ``<``/repository``>`` ``<``/repositories``>`` ``<pluginRepositories>`` ``<pluginRepository>`` ``<``id``>spring-milestones<``/id``>`` ``<name>Spring Milestones<``/name``>`` ``<url>https:``//repo``.spring.io``/milestone``<``/url``>`` ``<``/pluginRepository``>`` ``<``/pluginRepositories``> <``/project``> |
|---|
MySQL数据库数据源类文件
创建名为DataSourceConfig的类,上一篇已经针对该内容详细介绍,在这里就不过多解释了,如果大家有什么不明白可以翻看以前记录【微信公众号“Java精选”,Spring Boot从入门到精通系列文章】,具体代码如下:
| 1234567891011121314151617181920212223242526272829303132333435363738394041424344 | package com.yoodb.study.demo04.datasource; import org.apache.ibatis.session.SqlSessionFactory;``import org.mybatis.spring.SqlSessionFactoryBean;``import org.mybatis.spring.SqlSessionTemplate;``import org.mybatis.spring.annotation.MapperScan;``import org.springframework.beans.factory.annotation.Qualifier;``import org.springframework.boot.context.properties.ConfigurationProperties;``import org.springframework.boot.jdbc.DataSourceBuilder;``import org.springframework.context.annotation.Bean;``import org.springframework.context.annotation.Configuration;``import org.springframework.context.annotation.Primary;``import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import javax.sql.DataSource; @Configuration``@MapperScan``(basePackages = ``"com.yoodb.study.demo04.mapper"``, sqlSessionFactoryRef = ``"sqlSessionFactory"``)``public class DataSourceConfig {`` ``@Bean``(name = ``"dataSource"``)`` ``@Primary`` ``@ConfigurationProperties``(prefix = ``"spring.datasource"``)`` ``public DataSource getDateSourceOne() {`` ``return DataSourceBuilder.create().build();`` ``} ``@Bean``(name = ``"sqlSessionFactory"``)`` ``@Primary`` ``public SqlSessionFactory oneSqlSessionFactory(``@Qualifier``(``"dataSource"``) DataSource datasource)`` ``throws Exception {`` ``SqlSessionFactoryBean bean = ``new SqlSessionFactoryBean();`` ``bean.setDataSource(datasource);`` ``bean.setMapperLocations(`` ``new PathMatchingResourcePatternResolver().getResources(``"classpath*:mapper/*.xml"``));`` ``return bean.getObject();`` ``}`` ``@Bean``(``"sqlSessionTemplate"``)`` ``@Primary`` ``public SqlSessionTemplate sqlsessiontemplate(`` ``@Qualifier``(``"sqlSessionFactory"``) SqlSessionFactory sessionfactory) {`` ``return new SqlSessionTemplate(sessionfactory);`` ``}``} |
|---|
Redis缓存类文件
创建RedisConfig配置类,具体代码如下:
| 1234567891011121314151617181920212223242526272829 | package com.yoodb.study.demo04.datasource; import org.springframework.boot.context.properties.ConfigurationProperties;``import org.springframework.cache.annotation.CachingConfigurerSupport;``import org.springframework.context.annotation.Bean;``import org.springframework.context.annotation.Configuration;``import org.springframework.data.redis.connection.RedisConnectionFactory;``import org.springframework.data.redis.core.RedisTemplate;``import org.springframework.data.redis.serializer.StringRedisSerializer; @Configuration``public class RedisConfig ``extends CachingConfigurerSupport { ``@Bean``(``"redisTemplate"``)`` ``@ConfigurationProperties``(prefix=``"spring.redis"``)`` ``public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory){`` ``RedisTemplate<String, Object> redisTemplate = ``new RedisTemplate<>();`` ``redisTemplate.setConnectionFactory(factory); ``//将key的序列化设置成StringRedisSerializer`` ``StringRedisSerializer keySerializer = ``new StringRedisSerializer();`` ``redisTemplate.setKeySerializer(keySerializer);`` ``redisTemplate.setHashKeySerializer(keySerializer); ``redisTemplate.afterPropertiesSet();`` ``return redisTemplate;`` ``}`` } |
|---|
注:在添加RedisConfig配置时,因为连接redis需要RedisConnection和RedisConnectionFactory,RedisConnection是通过RedisConnectionFactory进行创建。
****实体类文件
新增BootUser实体类文件,具体代码如下:
| 123456789101112131415161718192021222324252627282930313233 | package com.yoodb.study.demo04.bean; import java.io.Serializable; public class BootUser ``implements Serializable {`` ``private String id;`` ``private String name;`` ``private String detail; ``public String getId() {`` ``return id;`` ``} ``public void setId(String id) {`` ``this``.id = id;`` ``} ``public String getName() {`` ``return name;`` ``} ``public void setName(String name) {`` ``this``.name = name;`` ``} ``public String getDetail() {`` ``return detail;`` ``} ``public void setDetail(String detail) {`` ``this``.detail = detail;`` ``}``} |
|---|
新增mapper接口类文件
mapper接口类文件,具体代码如下:
| 123456 | package com.yoodb.study.demo04.mapper;``import com.yoodb.study.demo04.bean.BootUser;``import java.util.List;``public interface BootUserMapper {`` ``List<BootUser> selectAll();``} |
|---|
新增mapper xml文件
在src/main/resources/mapper/(不存在文件加新建)创建BootUserMapper.xml文件,具体配置信息如下:
| 123456789101112131415 | <?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=``"com.yoodb.study.demo04.mapper.BootUserMapper" >`` ``<resultMap ``id``=``"BaseResultMap" type``=``"com.yoodb.study.demo04.bean.BootUser" >`` ``<``id column=``"id" property=``"id" jdbcType=``"VARCHAR" />`` ``<result column=``"user_name" property=``"name" jdbcType=``"VARCHAR" />`` ``<result column=``"detail" property=``"detail" jdbcType=``"VARCHAR" />`` ``<``/resultMap``> ``<``select id``=``"selectAll" resultMap=``"BaseResultMap"``>`` ``select`` ``id``, user_name, detail`` ``from boot_user order by detail asc`` ``<``/select``>``<``/mapper``> |
|---|
application.properties文件
在application.properties文件中增加MySQL数据库连接配置和Redis缓存连接配置参数,参考信息如下:
| 1234567891011121314151617 | #MySQL``spring.datasource.jdbc-url=jdbc:mysql:``//123``.57.47.154:3306``/dba``spring.datasource.username=root``spring.datasource.password=wangyoodb``spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver``spring.datasource.max-idle=10``spring.datasource.max-wait=1000``spring.datasource.min-idle=5``spring.datasource.initial-size=5 #Redis``#Redis数据库索引(默认为0)``spring.redis.database=0``#Redis服务器地址``spring.redis.host=127.0.0.1``#Redis服务器连接端口``spring.redis.port=6379 |
|---|
注:其中spring.redis.database参数的配置通常使用0即可,Redis在配置的时候可以设置数据库数量,默认为16个,可以理解为数据库的schema。
****创建service类文件
新增文件名BootUserService类文件,具体代码如下:
| 123456789101112131415161718192021222324252627 | package com.yoodb.study.demo04.service; import java.util.List; import com.yoodb.study.demo04.bean.BootUser;``import com.yoodb.study.demo04.mapper.BootUserMapper;``import org.springframework.beans.factory.annotation.Autowired;``import org.springframework.data.redis.core.RedisTemplate;``import org.springframework.stereotype.Service; @Service``public class BootUserService { ``@Autowired`` ``private BootUserMapper bootUserMapper; ``@Autowired`` ``private RedisTemplate redisTemplate; ``public List<BootUser> getUsers(){`` ``List<BootUser> bootUsers = bootUserMapper.selectAll();`` ``redisTemplate.opsForValue().set(``"bootUsers"``,bootUsers);`` ``List<BootUser> list = (List<BootUser>)redisTemplate.opsForValue().get(``"bootUsers"``);`` ``return list;`` ``} } |
|---|
创建controller类文件
新增文件名BootUserController类文件,具体代码如下:
| 1234567891011121314151617181920212223 | package com.yoodb.study.demo04; import java.util.List; import com.yoodb.study.demo04.bean.BootUser;``import com.yoodb.study.demo04.service.BootUserService;``import org.springframework.beans.factory.annotation.Autowired;``import org.springframework.web.bind.annotation.RequestMapping;``import org.springframework.web.bind.annotation.RestController; @RestController``@RequestMapping``(``"/myt"``)``public class BootUserController {`` ``@Autowired`` ``private BootUserService service; ``@RequestMapping``(``"/getUsers"``)`` ``public List<BootUser> getUsers() {`` ``List<BootUser> list = service.getUsers();`` ``return list;`` ``} } |
|---|
mapper的接口、xml文件及实体文件、service层、controller层创建完成后,目录如图:
****项目启动
项目启动后访问请求地址:
http://localhost:8080/myt/getUsers
通过浏览器访问输出如下信息:
| 1 | [{``"id"``:``"1"``,``"name"``:``"admin"``,``"detail"``:``"欢迎关注“Java精选”微信公众号,专注程序员推送一些Java开发知识,包括基础知识、各大流行框架(Mybatis、Spring、Spring Boot等)、大数据技术(Storm、Hadoop、MapReduce、Spark等)、数据库(Mysql、Oracle、NoSQL等)、算法与数据结构、面试专题、面试技巧经验、职业规划以及优质开源项目等。其中一部分由小编总结整理,另一部分来源于网络上优质资源,希望对大家的学习和工作有所帮助。"``}] |
|---|
Spring Boot从入门到精通(六)集成Redis实现缓存机制(项目源码springboot-study-demo04)地址:github.com/yoodb/sprin… Boot集成Redis实现缓存机制,实际上就这么简单。不过需要注意使用的时候遇到的坑。~~