Redis框架如何搭建SpringBoot2.X

56次阅读
没有评论

共计 7781 个字符,预计需要花费 20 分钟才能阅读完成。

自动写代码机器人,免费开通

这篇文章主要介绍 Redis 框架如何搭建 SpringBoot2.X,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

一、使用 Spring Initializr 创建项目 web 项目

1、File→New→Project

Redis 框架如何搭建 SpringBoot2.X

2、点击 Next 如图所示,命名好 Group 和 Artifact

Redis 框架如何搭建 SpringBoot2.X

3、Next 后如图所示,勾选中需要的依赖,Spring Initializr 会自动导入所需的 starter

Redis 框架如何搭建 SpringBoot2.X

4、创建项目成功后,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.2.2.RELEASE /version 
 relativePath/ !-- lookup parent from repository -- 
 /parent 
 groupId com.heny /groupId 
 artifactId spring-boot-redis /artifactId 
 version 0.0.1-SNAPSHOT /version 
 name spring-boot-redis /name 
 description Demo project for Spring Boot /description 
 properties 
 java.version 1.8 /java.version 
 /properties 
 dependencies 
 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.1 /version 
 /dependency 
 dependency 
 groupId mysql /groupId 
 artifactId mysql-connector-java /artifactId 
 scope runtime /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 
 /dependencies 
 build 
 plugins 
 plugin 
 groupId org.springframework.boot /groupId 
 artifactId spring-boot-maven-plugin /artifactId 
 /plugin 
 /plugins 
 /build 
 /project

5、在 pom.xml 文件中添加 redis 的 starter

dependency 
 groupId org.springframework.boot /groupId 
 artifactId spring-boot-starter-data-redis /artifactId 
 /dependency

6、创建 JavaBean 用于封装数据库数据,需要实现 Serializable

package com.henya.springboot.bean;
import java.io.Serializable;
public class Employee implements Serializable{
 private Integer id;
 private String lastName;
 private String email;
 private Integer gender; // 性别 1 男 0 女
 private Integer dId;

public Employee(Integer id, String lastName, String email, Integer gender, Integer dId) {super(); this.id = id; this.lastName = lastName; this.email = email; this.gender = gender; this.dId = dId; public Integer getId() { return id; public void setId(Integer id) { this.id = id; public String getLastName() { return lastName; public void setLastName(String lastName) { this.lastName = lastName; public String getEmail() { return email; public void setEmail(String email) { this.email = email; public Integer getGender() { return gender; public void setGender(Integer gender) { this.gender = gender; public Integer getdId() { return dId; public void setdId(Integer dId) { this.dId = dId; @Override public String toString() { return Employee [id= + id + , lastName= + lastName + , email= + email + , gender= + gender + , dId= + dId + ] }

注意:
在写 JavaBean 对象时需要实现 Serializable 接口否则会报以下错误:

Cannot deserialize; nested exception is org.springframework.core.serializer.support.SerializationFailedException

7、整合 Mybatis 操作数据库,在 application.properties 配置文件中配置数据源信息

#serverTimezone 用于指定时区,不然会报错
spring.datasource.url=jdbc:mysql://localhost:3306/cache?serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=123456
# 开启驼峰命名法规则
mybatis.configuration.map-underscore-to-camel-case=true
#日志级别
logging.level.com.henya.springboot.mapper=debug

8、使用注解版 Mybatis 创建 Mapper

package com.henya.springboot.mapper;

@Select(SELECT * FROM employee WHERE id=#{id} ) public Employee getEmpById(Integer id); @Update(UPDATE employee SET lastName=#{lastName},email=#{email},gender=#{gender},d_id=#{dId} WHERE id=#{id} ) public void updateEmp(Employee employee); @Delete(DELETE FROM emlpoyee WHERE id=#{id} ) public void delEmpById(Integer id); @Insert(INSERT INTO employee(lastName, email, gender, d_id) VALUES (#{lastName}, #{email}, #{gender}, #{dId}) ) public Employee insertEmp(Employee employee); @Select(SELECT * FROM employee WHERE lastName=#{lastName} ) public Employee getEmpByLastName(String lastName); }

注意:
需要使用使用 @MapperScan 注解扫描 Mapper 所在的接口,只需要加在主程序类上即可。除此之外,还要使用 @EnableCaching 用于开启缓存。

@MapperScan(com.henya.springboot.mapper)
@SpringBootApplication
@EnableCaching // 开启缓存
public class SpringBootRedisApplication {public static void main(String[] args) {SpringApplication.run(SpringBootRedisApplication.class, args);
}

9、编写 Service 类,用于访问数据库或 redis 缓存

package com.henya.springboot.service;
import com.henya.springboot.bean.Employee;
import com.henya.springboot.mapper.EmployeeMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.*;
import org.springframework.stereotype.Service;
@CacheConfig(cacheNames = emp) // 抽取缓存的公共配置
@Service
public class EmployeeService {
 @Autowired
 EmployeeMapper employeeMapper;
 * @param id
 * @return
 @Cacheable(cacheNames = { emp},keyGenerator = myKeyGenerator )
 public Employee getEmpById(Integer id) {
 System.err.println( 开始查询 + id + 号员工 
 Employee employee = employeeMapper.getEmpById(id);
 return employee;
 * @CachePut:既调用方法(这个方法必须要执行),又更新缓存数据
 * @param employee
 * @return
 @CachePut(value = emp ,key = #result.id)
 public Employee updateEmp(Employee employee){System.err.println( 开始更新 + employee.getId() + 号员工 
 employeeMapper.updateEmp(employee);
 return employee;
 * @CacheEvict:缓存清除
 * @param id
 @CacheEvict(value = emp ,beforeInvocation = true)
 public void deleteEmp(Integer id){
 System.err.println( 删除 + id + 员工 
 int i = 10/0;
 }

10、编写 Controller 类

package com.henya.springboot.controller;

import com.henya.springboot.bean.Employee; import com.henya.springboot.service.EmployeeService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; * @Description: * @Author:HenYa * @CreatTime:2019/12/1 12:44 @RestController public class EmployeeController { @Autowired EmployeeService employeeService; @GetMapping(/emp/{id} ) public Employee getEmpById(@PathVariable( id) Integer id){Employee employee = employeeService.getEmpById(id); return employee; @GetMapping(/emp) public Employee updateEmp(Employee employee){Employee emp = employeeService.updateEmp(employee); return emp; }

二、测试 SpringBoot 整合 Redis 是否成功

1、在浏览器访问,也可以使用测试类,笔者使用了浏览器访问 http://localhost:8080/emp/ 1 进行测试,初次访问时,控制台会提示开始查询 1 号员工,如图所示。

Redis 框架如何搭建 SpringBoot2.X

2、再次访问时,控制台并没有 sql 日志,如图所示。

Redis 框架如何搭建 SpringBoot2.X

3、此时使用 RedisDesktopManager 工具查看 redis 时有数据,并且 cacheName 为 emp,如图所示

Redis 框架如何搭建 SpringBoot2.X

只是 emp 对象被序列化了。查看源码可知 Redis 默认使用 Jdk 进行序列化。

static RedisSerializer Object java(@Nullable ClassLoader classLoader) {return new JdkSerializationRedisSerializer(classLoader);
 }

查看 RedisSerializer 接口的实现有以下几种:

Redis 框架如何搭建 SpringBoot2.X

我们常用的就是以 json 的格式进行序列化。但是需要自定义 RedisCacheManager。

三、自定义 RedisCacheManager

package com.henya.springboot.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheConfiguration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.cache.RedisCacheWriter;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializationContext;
import org.springframework.data.redis.serializer.RedisSerializer;
 * @Description:
 * @Author:HenYa
 * @CreatTime:2019/12/6 20:50
@Configuration
public class MyRedisConfig {
 @Bean
 public RedisCacheManager empCacheManager(RedisConnectionFactory redisConnectionFactory){//RedisCacheManager redisCacheManager = new RedisCacheManager(redisConnectionFactory);
 RedisCacheWriter redisCacheWriter = RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory);
 RedisSerializer Object redisSerializer = new GenericJackson2JsonRedisSerializer();
 RedisSerializationContext.SerializationPair Object pair = RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer);
 RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig().serializeValuesWith(pair);
 // 默认会将 CacheName 作为 key 的前缀
 return new RedisCacheManager(redisCacheWriter, redisCacheConfiguration);
 }

以上是“Redis 框架如何搭建 SpringBoot2.X”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注丸趣 TV 行业资讯频道!

向 AI 问一下细节

丸趣 TV 网 – 提供最优质的资源集合!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-12-18发表,共计7781字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)