佳木斯湛栽影视文化发展公司

主頁(yè) > 知識(shí)庫(kù) > 從零搭建SpringBoot2.X整合Redis框架的詳細(xì)教程

從零搭建SpringBoot2.X整合Redis框架的詳細(xì)教程

熱門標(biāo)簽:地方門戶網(wǎng)站 網(wǎng)站排名優(yōu)化 AI電銷 鐵路電話系統(tǒng) 呼叫中心市場(chǎng)需求 服務(wù)外包 Linux服務(wù)器 百度競(jìng)價(jià)排名

最近也不知道寫啥,看之前寫過(guò)Kafka整合Springboot的文章,大家反響還挺熱烈的,嘿嘿嘿,就感覺(jué)幫助到大家了還挺好的,也算是達(dá)到了自己的目的,正好,今天業(yè)務(wù)模塊是springboot整合redis,因?yàn)橹白鲞^(guò),所以有現(xiàn)成的代碼,cv一下之后就可以了,所以時(shí)間比較多,那就給大家整理一下Springboot整合Redis的代碼實(shí)現(xiàn)吧,從項(xiàng)目搭建到源碼實(shí)現(xiàn),下面全都有,耐心看完,相信會(huì)對(duì)你有所幫助的

好了,話不多說(shuō),我們開(kāi)始吧,同樣的,還是建議能夠自己在自己的PC端實(shí)現(xiàn)一下
個(gè)人公眾號(hào):Java架構(gòu)師聯(lián)盟,每日更新技術(shù)好文

一、使用Spring Initializr創(chuàng)建項(xiàng)目web項(xiàng)目

1、File→New→Project

2、點(diǎn)擊Next如圖所示,命名好Group和Artifact

3、Next后如圖所示,勾選中需要的依賴,Spring Initializr會(huì)自動(dòng)導(dǎo)入所需的starter

4、創(chuàng)建項(xiàng)目成功后,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、創(chuàng)建JavaBean用于封裝數(shù)據(jù)庫(kù)數(shù)據(jù),需要實(shí)現(xiàn)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() {
		super();
	}

	
	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對(duì)象時(shí)需要實(shí)現(xiàn)Serializable接口否則會(huì)報(bào)以下錯(cuò)誤:

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

7、整合Mybatis操作數(shù)據(jù)庫(kù),在application.properties配置文件中配置數(shù)據(jù)源信息

#serverTimezone用于指定時(shí)區(qū),不然會(huì)報(bào)錯(cuò)
spring.datasource.url=jdbc:mysql://localhost:3306/cache?serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=123456

# 開(kāi)啟駝峰命名法規(guī)則
mybatis.configuration.map-underscore-to-camel-case=true
#日志級(jí)別
logging.level.com.henya.springboot.mapper=debug

8、使用注解版Mybatis創(chuàng)建Mapper

package com.henya.springboot.mapper;


import com.henya.springboot.bean.Employee;
import org.apache.ibatis.annotations.*;

@Mapper
public interface EmployeeMapper {

 @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用于開(kāi)啟緩存。

@MapperScan("com.henya.springboot.mapper")
@SpringBootApplication
@EnableCaching //開(kāi)啟緩存
public class SpringBootRedisApplication {

	public static void main(String[] args) {
		SpringApplication.run(SpringBootRedisApplication.class, args);
	}
}

9、編寫Service類,用于訪問(wèn)數(shù)據(jù)庫(kù)或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("開(kāi)始查詢"+ id +"號(hào)員工");
 Employee employee = employeeMapper.getEmpById(id);
 return employee;
 }

 /**
 * @CachePut:既調(diào)用方法(這個(gè)方法必須要執(zhí)行),又更新緩存數(shù)據(jù)
 * @param employee
 * @return
 */
 @CachePut(value = "emp",key = "#result.id")
 public Employee updateEmp(Employee employee){
 System.err.println("開(kāi)始更新" + employee.getId() + "號(hào)員工");
 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;
 }
}

二、測(cè)試SpringBoot整合Redis是否成功

1、在瀏覽器訪問(wèn),也可以使用測(cè)試類,筆者使用了瀏覽器訪問(wèn)http://localhost:8080/emp/1進(jìn)行測(cè)試,初次訪問(wèn)時(shí),控制臺(tái)會(huì)提示開(kāi)始查詢1號(hào)員工,如圖所示。

2、再次訪問(wèn)時(shí),控制臺(tái)并沒(méi)有sql日志,如圖所示。

3、此時(shí)使用RedisDesktopManager工具查看redis時(shí)有數(shù)據(jù),并且cacheName為emp,如圖所示

只是emp對(duì)象被序列化了。查看源碼可知Redis默認(rèn)使用Jdk進(jìn)行序列化。

static RedisSerializerObject> java(@Nullable ClassLoader classLoader) {
 return new JdkSerializationRedisSerializer(classLoader);
 }

查看RedisSerializer接口的實(shí)現(xiàn)有以下幾種:

我們常用的就是以json的格式進(jìn)行序列化。但是需要自定義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);

 RedisSerializerObject> redisSerializer = new GenericJackson2JsonRedisSerializer();

 RedisSerializationContext.SerializationPairObject> pair = RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer);
 RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig().serializeValuesWith(pair);
 // 默認(rèn)會(huì)將CacheName作為key的前綴
 return new RedisCacheManager(redisCacheWriter, redisCacheConfiguration);
 }
 }

此時(shí),Redis中緩存數(shù)據(jù)就以Json的格式進(jìn)行序列化,如圖所示。

到此這篇關(guān)于從零搭建SpringBoot2.X整合Redis框架的詳細(xì)教程的文章就介紹到這了,更多相關(guān)SpringBoot2.X整合Redis框架內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Springboot使用redis進(jìn)行api防刷限流過(guò)程詳解
  • Redis 緩存實(shí)現(xiàn)存儲(chǔ)和讀取歷史搜索關(guān)鍵字的操作方法
  • redis分布式鎖的go-redis實(shí)現(xiàn)方法詳解
  • Asp.net core中RedisMQ的簡(jiǎn)單應(yīng)用實(shí)現(xiàn)
  • docker安裝redis設(shè)置密碼并連接的操作
  • Windows下如何安裝配置Redis環(huán)境
  • Redis六大數(shù)據(jù)類型使用方法詳解
  • Redis Java Lettuce驅(qū)動(dòng)框架原理解析
  • RedisAPI原子性操作及原理解析

標(biāo)簽:仙桃 衡水 湖南 湘潭 蘭州 崇左 銅川 黃山

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《從零搭建SpringBoot2.X整合Redis框架的詳細(xì)教程》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    定南县| 临洮县| 广饶县| 玉溪市| 贵溪市| 林州市| 临邑县| 金山区| 阳西县| 惠安县| 荃湾区| 日照市| 武山县| 锡林郭勒盟| 文安县| 鹤壁市| 剑阁县| 罗平县| 册亨县| 天水市| 洮南市| 霍山县| 长岭县| 鄱阳县| 揭西县| 陆河县| 鄢陵县| 曲阜市| 阜新| 无为县| 库伦旗| 通海县| 同江市| 达日县| 肥乡县| 登封市| 聂拉木县| 台湾省| 玉树县| 拜城县| 陈巴尔虎旗|