SpringBoot中開(kāi)啟Gzip壓縮的兩種方式詳解
前言
在當(dāng)今數(shù)字化時(shí)代,隨著互聯(lián)網(wǎng)應(yīng)用的飛速發(fā)展,數(shù)據(jù)傳輸?shù)男屎托阅艹蔀榱酥陵P(guān)重要的問(wèn)題。GeoJSON 是一種基于 JSON 格式的地理空間數(shù)據(jù)交換格式,它廣泛應(yīng)用于地理信息系統(tǒng)(GIS)領(lǐng)域,用于描述地理空間數(shù)據(jù)的幾何形狀、屬性等信息。GeoJSON 數(shù)據(jù)通常包含大量的地理坐標(biāo)點(diǎn)、幾何形狀等信息,數(shù)據(jù)量往往較大。在 Web 地理信息系統(tǒng)應(yīng)用中,如地圖展示、地理數(shù)據(jù)可視化等場(chǎng)景,GeoJSON 數(shù)據(jù)的傳輸效率直接關(guān)系到地圖加載的速度和用戶(hù)體驗(yàn)。因此,對(duì) GeoJSON 數(shù)據(jù)進(jìn)行有效的壓縮,以減少數(shù)據(jù)傳輸?shù)捏w積,顯得尤為重要。對(duì)于基于SpringBoot 框架構(gòu)建的 WebGIS 應(yīng)用來(lái)說(shuō),如何高效地傳輸數(shù)據(jù)、減少網(wǎng)絡(luò)帶寬的占用,是提升用戶(hù)體驗(yàn)和系統(tǒng)性能的關(guān)鍵所在。而 Gzip 壓縮技術(shù),作為一種被廣泛采用的解決方案,無(wú)疑為這一問(wèn)題的解決提供了強(qiáng)大的助力。

以 GeoJSON 數(shù)據(jù)為例,通過(guò)在 SpringBoot 應(yīng)用中開(kāi)啟 Gzip 壓縮,對(duì) GeoJSON 數(shù)據(jù)進(jìn)行瘦身,不僅可以顯著減少數(shù)據(jù)傳輸?shù)捏w積,提高地圖加載的速度,還可以提升用戶(hù)的交互體驗(yàn)。在實(shí)際的 Web 地理信息系統(tǒng)開(kāi)發(fā)中,這種優(yōu)化手段是非常實(shí)用和有效的。通過(guò)對(duì) GeoJSON 數(shù)據(jù)的壓縮處理,我們可以更好地滿(mǎn)足用戶(hù)對(duì)于地圖快速加載和流暢交互的需求,同時(shí)也為整個(gè)應(yīng)用的性能優(yōu)化提供了有力的支持。
在接下來(lái)的內(nèi)容中,我們將詳細(xì)介紹在 SpringBoot 中開(kāi)啟 Gzip 壓縮的兩種方式的具體實(shí)現(xiàn)步驟,并通過(guò)實(shí)際的 GeoJSON 數(shù)據(jù)壓縮案例,展示這兩種方式的應(yīng)用效果和優(yōu)缺點(diǎn)。希望通過(guò)本文的介紹,能夠幫助讀者更好地理解和掌握在 SpringBoot 應(yīng)用中使用 Gzip 壓縮技術(shù)的方法,從而提升自己開(kāi)發(fā)的 WebGIS 應(yīng)用的性能和用戶(hù)體驗(yàn)。
一、GZIP壓縮知識(shí)簡(jiǎn)介
GZIP 是一種數(shù)據(jù)壓縮格式,只能用于壓縮單個(gè)文件。它可用于網(wǎng)絡(luò)文件傳輸時(shí)的壓縮,例如 nginx 中的 ngx_http_gzip_module,啟用壓縮功能后可以節(jié)約帶寬;也可用于本地文件存儲(chǔ)時(shí)的壓縮。本節(jié)將重點(diǎn)對(duì)Gzip進(jìn)行一個(gè)簡(jiǎn)單的介紹,讓大家對(duì)Gzip的相關(guān)知識(shí)有一個(gè)簡(jiǎn)單的了解。
1、什么是Gzip
Gzip 的壓縮算法基于 LZ77 算法 和 Huffman 編碼 的結(jié)合。具體過(guò)程如下:
LZ77 算法:LZ77 算法通過(guò)查找和替換重復(fù)的字節(jié)序列來(lái)壓縮數(shù)據(jù)。它維護(hù)一個(gè)滑動(dòng)窗口,在窗口內(nèi)查找匹配的字符串,然后使用指針來(lái)替代這些重復(fù)的字符串。例如,對(duì)于字符串 "http://jiurl.yeah.nethttp://jiurl.nease.net",LZ77 算法會(huì)將其壓縮為 "http://jiurl.yeah.net(22,13)nease(23,4)",其中 (22,13) 表示距離當(dāng)前位置 22 個(gè)字符處的 13 個(gè)字符與當(dāng)前位置的字符相同。
Huffman 編碼:Huffman 編碼是一種基于字符頻率的編碼方法。它為出現(xiàn)頻率高的字符分配較短的編碼,為出現(xiàn)頻率低的字符分配較長(zhǎng)的編碼,從而達(dá)到壓縮的目的。在 Gzip 中,LZ77 算法的輸出結(jié)果會(huì)進(jìn)一步通過(guò) Huffman 編碼進(jìn)行壓縮。
Gzip 文件結(jié)構(gòu):Gzip 文件包含文件頭、壓縮數(shù)據(jù)塊和文件尾。文件頭存儲(chǔ)文件的元數(shù)據(jù),如壓縮方法、時(shí)間戳等;壓縮數(shù)據(jù)塊是使用 DEFLATE 算法壓縮后的數(shù)據(jù);文件尾存儲(chǔ)校驗(yàn)和(CRC32)和原始文件大小,以確保文件的完整性
2、Gzip特點(diǎn)
無(wú)損壓縮:Gzip 是一種無(wú)損壓縮算法,數(shù)據(jù)在解壓縮后可以完全還原,沒(méi)有任何損失。
高效的壓縮率:對(duì)于文本文件(如 HTML、JSON、XML),Gzip 的壓縮率通常在 50%-90% 之間。它通過(guò)查找重復(fù)的字符串并用較短的指針替代,以及根據(jù)字符頻率進(jìn)行編碼,從而實(shí)現(xiàn)高效壓縮。
廣泛支持:Gzip 被幾乎所有現(xiàn)代瀏覽器、服務(wù)器和編程語(yǔ)言支持。在 HTTP 傳輸中,服務(wù)器可以根據(jù)瀏覽器的請(qǐng)求頭(如 Accept-Encoding: gzip)來(lái)判斷是否使用 Gzip 壓縮響應(yīng)內(nèi)容。
壓縮和解壓速度較快:Gzip 的壓縮和解壓速度相對(duì)較快,尤其是解壓過(guò)程,因?yàn)榻鈮簳r(shí)只需根據(jù)指針和編碼還原數(shù)據(jù),計(jì)算量相對(duì)較小。
適用于特定文件類(lèi)型:Gzip 對(duì)文本文件的壓縮效果較好,但對(duì)于已經(jīng)壓縮過(guò)的文件(如圖片、音樂(lè)、視頻)效果不明顯,甚至可能導(dǎo)致文件變大
3、Gzip在GIS方面的應(yīng)用
地理數(shù)據(jù)傳輸:在 GIS 應(yīng)用中,地理數(shù)據(jù)(如 GeoJSON 文件)通常包含大量的坐標(biāo)點(diǎn)和幾何形狀信息,數(shù)據(jù)量較大。使用 Gzip 壓縮可以顯著減少數(shù)據(jù)傳輸?shù)捏w積,加快地圖加載速度,提升用戶(hù)體驗(yàn)。
服務(wù)器端優(yōu)化:在服務(wù)器端,可以配置 Web 服務(wù)器(如 Nginx)開(kāi)啟 Gzip 壓縮功能。當(dāng)客戶(hù)端請(qǐng)求地理數(shù)據(jù)時(shí),服務(wù)器會(huì)自動(dòng)對(duì)響應(yīng)內(nèi)容進(jìn)行壓縮,減少網(wǎng)絡(luò)帶寬的占用。
前端性能優(yōu)化:在前端開(kāi)發(fā)中,可以通過(guò)工具(如 Webpack 的 Compression-webpack-plugin 插件)在構(gòu)建過(guò)程中對(duì)地理數(shù)據(jù)文件進(jìn)行 Gzip 壓縮,然后在服務(wù)器上直接提供壓縮后的文件,減少服務(wù)器的實(shí)時(shí)壓縮負(fù)載。
數(shù)據(jù)存儲(chǔ)優(yōu)化:對(duì)于存儲(chǔ)在服務(wù)器上的地理數(shù)據(jù)文件,使用 Gzip 壓縮可以節(jié)省存儲(chǔ)空間。在需要讀取數(shù)據(jù)時(shí),再進(jìn)行解壓處理。
總之,Gzip 壓縮技術(shù)在 GIS 領(lǐng)域的應(yīng)用,不僅可以提高數(shù)據(jù)傳輸效率,還可以?xún)?yōu)化服務(wù)器性能和存儲(chǔ)空間,是提升 GIS 應(yīng)用性能的重要手段之一。
二、SpringBoot中開(kāi)啟Gzip的方式
SpringBoot 是一個(gè)非常流行的 Java 基于 Spring 框架的快速開(kāi)發(fā)框架,它極大地簡(jiǎn)化了 Spring 應(yīng)用的開(kāi)發(fā)過(guò)程。在 SpringBoot 應(yīng)用中,通過(guò)合理的配置和編程,可以很方便地集成 Gzip 壓縮功能,從而實(shí)現(xiàn)對(duì)響應(yīng)數(shù)據(jù)的自動(dòng)壓縮。這不僅可以提高數(shù)據(jù)傳輸?shù)男?,還可以減輕服務(wù)器的負(fù)載,提升整個(gè)應(yīng)用的性能。本節(jié)將重點(diǎn)介紹在SpringBoot中關(guān)于Gzip的相關(guān)知識(shí)以及在SpringBoot中GeoJSON的一些實(shí)踐案例。
1、在SpringBoot中開(kāi)啟Gzip的知識(shí)簡(jiǎn)介
在 SpringBoot 中,開(kāi)啟 Gzip 壓縮主要有兩種方式:一種是通過(guò)配置文件進(jìn)行全局配置,另一種是通過(guò)編程的方式在特定的控制器或方法上進(jìn)行局部配置。這兩種方式各有優(yōu)缺點(diǎn),適用于不同的應(yīng)用場(chǎng)景。
全局配置方式 :通過(guò)在 SpringBoot 的配置文件(如 application.yml 或 application.properties)中添加相關(guān)的 Gzip 壓縮配置,可以實(shí)現(xiàn)對(duì)整個(gè)應(yīng)用的 HTTP 響應(yīng)進(jìn)行統(tǒng)一的壓縮處理。這種方式簡(jiǎn)單方便,適用于大多數(shù)需要壓縮的場(chǎng)景,但缺乏對(duì)特定數(shù)據(jù)類(lèi)型的針對(duì)性處理。
局部配置方式 :通過(guò)在控制器或方法上添加自定義的注解或邏輯,可以實(shí)現(xiàn)對(duì)特定數(shù)據(jù)類(lèi)型的壓縮處理。這種方式更加靈活,可以根據(jù)不同的數(shù)據(jù)類(lèi)型和業(yè)務(wù)需求,定制不同的壓縮策略,但相對(duì)來(lái)說(shuō)實(shí)現(xiàn)起來(lái)較為復(fù)雜,需要更多的編程工作。
這里首先簡(jiǎn)單介紹了兩種在SpringBoot中開(kāi)啟Gzip壓縮的方式,為下文全面講解這兩種方式做準(zhǔn)備,先讓大家了解相關(guān)知識(shí)。
2、SpringBoot中GeoJSON的實(shí)例
GeoJSON在WebGIS中的用處很多,很多矢量數(shù)據(jù)的邊界,范圍點(diǎn)等數(shù)據(jù),我們都是直接以GeoJSON的格式返回給前端,并直接進(jìn)行展示的。比如之前很多的行政區(qū)劃展示,省市縣等不同的行政區(qū)劃范圍展示等,我們的實(shí)現(xiàn)過(guò)程都是在后臺(tái)的Controller層中返回一個(gè)包含GeoJSON的對(duì)象,方法如下:
package com.yelang.project.meteorology.domain;
import java.io.Serializable;
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
@Data
@ToString(callSuper=true)//callSuper=true表示輸出父類(lèi)屬性
@EqualsAndHashCode(callSuper=false)
public class AreaWeatherVO extends WeatherNow implements Serializable{
private static final long serialVersionUID = -7559774548761847068L;
@TableField(exist = false,value= "province_code")
private String provinceCode;
@TableField(exist = false,value= "province_name")
private String provinceName;
@TableField(exist = false,value= "city_code")
private String cityCode;
@TableField(exist = false,value= "city_name")
private String cityName;
@TableField(exist = false,value= "area_name")
private String areaName;
@TableField(exist = false)
private String geomJson;
private String lat;
private String lon;
}上面是一個(gè)視圖對(duì)象的具體代碼,在Controller的方法中我們調(diào)用如下:
@RequiresPermissions("met:province:weather:list")
@GetMapping("/list/{pcode}")
@ResponseBody
public AjaxResult ewsnProvinceList(@PathVariable("pcode") String pcode){
String day = "2025-08-17";
List<AreaWeatherVO> dataList = weatherNowService.getWeatherByProvinceAndday(pcode,day);
return AjaxResult.success().put("data", dataList);
}經(jīng)過(guò)以上的代碼輸出接口中就包含GeoJOSN數(shù)據(jù),如下圖所示:

其具體的geoJSON值如下圖:

在網(wǎng)絡(luò)窗口中可以看到整個(gè)接口返回的數(shù)據(jù)大小大約為5MB,如果遇到更大范圍的行政區(qū)劃,返回的數(shù)據(jù)肯定會(huì)大,比如西藏的行政區(qū)劃大約有14MB,如圖所示:

那么如何通過(guò)開(kāi)啟Gzip來(lái)減少這些數(shù)據(jù)的輸出呢?下面兩個(gè)部分來(lái)重點(diǎn)講解。
三、全局開(kāi)啟Gzip實(shí)現(xiàn)
本節(jié)將詳細(xì)介紹如何在SpringBoot中開(kāi)啟Gzip壓縮的配置。
1、實(shí)現(xiàn)原理
在 application.yml 或 application.properties 中添加以下配置:
示例:application.yml
server:
compression:
enabled: true
mime-types: application/json
min-response-size: 1KB # 小于1KB的響應(yīng)不壓縮或者application.properties中:
server.compression.enabled=true server.compression.mime-types=application/json server.compression.min-response-size=1024
請(qǐng)注意:該配置會(huì)對(duì)所有返回 application/json 的接口啟用 GZIP 壓縮。
2、實(shí)現(xiàn)效果
在我們的工程中配置文件是以yml的形式配置的,按照上面的步驟進(jìn)行設(shè)置后,重新啟動(dòng)應(yīng)用程序后來(lái)看一下同樣的接口,其返回的數(shù)據(jù)量大小是多少:

通過(guò)以上圖片可以直觀的看到,開(kāi)啟全局壓縮后,我們的接口返回大小,從14.4M下降了5MB,幾乎是原來(lái)的1/3,這個(gè)壓縮比例還是可以的。
四、局部約定配置
上面的這種實(shí)現(xiàn)方式全局的開(kāi)啟,也就是所有的接口都會(huì)開(kāi)啟,雖然可以設(shè)置mime-types來(lái)進(jìn)行一定的過(guò)濾,但是依然會(huì)有很大的覆蓋面。如果只想對(duì)某個(gè)接口生效或者指定一些接口生效又應(yīng)該怎么實(shí)現(xiàn)呢?本節(jié)來(lái)講講針對(duì)這種情況的實(shí)現(xiàn)。
1、實(shí)現(xiàn)原理
基于局部約定配置的方式的實(shí)現(xiàn)原理其實(shí)是通過(guò)自定義 Filter 來(lái)精確控制哪些接口啟用壓縮,因此通過(guò)過(guò)濾器就可以將我們需要設(shè)定的請(qǐng)求路徑進(jìn)行針對(duì)性過(guò)濾,從而開(kāi)啟針對(duì)這些接口的Gzip過(guò)濾壓縮。下面我們來(lái)看看在SpringBoot中如何實(shí)現(xiàn)呢?
2、具體代碼實(shí)現(xiàn)
首先在SpringBoot中直接創(chuàng)建一個(gè)過(guò)濾器Filter,關(guān)鍵代碼如下:
package com.yelang.framework.interceptor.gzip;
import org.springframework.stereotype.Component;
import org.springframework.util.AntPathMatcher;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
import java.util.zip.GZIPOutputStream;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.WriteListener;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
@Component
public class SelectiveGzipFilter implements Filter {
private final AntPathMatcher pathMatcher = new AntPathMatcher();
private final List<String> gzipPatterns = Arrays.asList(
"/eq/province/geojson/**",
"/eq/province/detourcoefficient/list/**",
"/eq/info/home/earthinfo",
"/eq/province/abbreviations/list"
);
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
String requestUri = req.getRequestURI();
String contextPath = req.getContextPath();
boolean match = gzipPatterns.stream()
.anyMatch(pattern -> pathMatcher.match(pattern, requestUri));
if (match) {
System.out.println("成功匹配");
// 啟用 GZIP 壓縮邏輯(同上)
HttpServletResponse res = (HttpServletResponse) response;
res.setHeader("Content-Encoding", "gzip");
res.setHeader("Content-Type", "application/json");
GZIPResponseWrapper gzipResponse = new GZIPResponseWrapper(res);
chain.doFilter(request, gzipResponse);
gzipResponse.finish();
} else {
System.out.println("未匹配上...");
chain.doFilter(request, response);
}
}
static class GZIPResponseWrapper extends HttpServletResponseWrapper {
private final GZIPOutputStream gzipOutputStream;
public GZIPResponseWrapper(HttpServletResponse response) throws IOException {
super(response);
gzipOutputStream = new GZIPOutputStream(response.getOutputStream());
}
@Override
public ServletOutputStream getOutputStream() {
return new ServletOutputStream() {
@Override
public void write(int b) throws IOException {
gzipOutputStream.write(b);
}
@Override
public boolean isReady() {
return true;
}
@Override
public void setWriteListener(WriteListener writeListener) {
throw new UnsupportedOperationException();
}
};
}
public void finish() throws IOException {
gzipOutputStream.finish();
}
}
}這里演示了如何設(shè)置多個(gè)目標(biāo)URL地址的配置方式,使用AntPathMatcher 來(lái)進(jìn)行匹配實(shí)現(xiàn)。需要注意的是,這里我們沒(méi)有區(qū)分請(qǐng)求的頭地址,以若依為例,可能會(huì)在匹配時(shí)無(wú)法正確對(duì)應(yīng),導(dǎo)致無(wú)法正常的開(kāi)啟Gzip壓縮,因此為了保證正確的啟用,我們?cè)谶M(jìn)行地址匹配時(shí),需要自動(dòng)過(guò)濾項(xiàng)目的服務(wù)名稱(chēng),詳細(xì)代碼如下:
String contextPath = req.getContextPath();
// 去掉 context-path 部分,只匹配相對(duì)路徑
String relativePath = requestUri.substring(contextPath.length());
System.out.println("relativePath==>" + relativePath);
/*boolean match = gzipPatterns.stream()
.anyMatch(pattern -> pathMatcher.match(pattern, requestUri));*/
boolean match = gzipPatterns.stream()
.anyMatch(pattern -> pathMatcher.match(pattern, relativePath));其實(shí)這里的contenxPath對(duì)應(yīng)的就是配置文件中定義的參數(shù):
# 開(kāi)發(fā)環(huán)境配置
server:
# 服務(wù)器的HTTP端口,默認(rèn)為80
port: 8080
servlet:
# 應(yīng)用的訪問(wèn)路徑
context-path: /earthqadminGeoJSON 數(shù)據(jù)通常體積較大,壓縮后可顯著減少傳輸時(shí)間。以下是實(shí)戰(zhàn)建議:
| 項(xiàng)目 | 建議值 | 說(shuō)明 |
|---|---|---|
| 壓縮類(lèi)型 | GZIP | 瀏覽器原生支持 |
| 最小壓縮閾值 | 1KB 或更小 | GeoJSON 一般遠(yuǎn)大于此值 |
| MIME 類(lèi)型 | application/json | 保持標(biāo)準(zhǔn)兼容 |
| 實(shí)測(cè)效果 | 原始 15MB → 壓縮后 300KB | 壓縮率可達(dá) 90%+ |
只有加上以上代碼后才能實(shí)現(xiàn)正確匹配,在訪問(wèn)地址被請(qǐng)求是輸出如下信息:

五、總結(jié)
以上就是本文的主要內(nèi)容,我們將詳細(xì)介紹在 SpringBoot 中開(kāi)啟 Gzip 壓縮的兩種方式的具體實(shí)現(xiàn)步驟,并通過(guò)實(shí)際的 GeoJSON 數(shù)據(jù)壓縮案例,展示這兩種方式的應(yīng)用效果和優(yōu)缺點(diǎn)。希望通過(guò)本文的介紹,能夠幫助讀者更好地理解和掌握在 SpringBoot 應(yīng)用中使用 Gzip 壓縮技術(shù)的方法,從而提升自己開(kāi)發(fā)的 WebGIS 應(yīng)用的性能和用戶(hù)體驗(yàn)。博文首先簡(jiǎn)單介紹了Gzip的相關(guān)知識(shí),然后介紹了在SpringBoot中開(kāi)啟Gzip的方式,最后以代碼加案例的形式詳細(xì)的介紹全局開(kāi)啟Gzip和局部開(kāi)啟Gzip的兩種不同模式實(shí)現(xiàn)原理及具體代碼實(shí)現(xiàn)。行文倉(cāng)促,定有不足之處,歡迎各位朋友在評(píng)論區(qū)批評(píng)指正,不勝感激。
以上就是SpringBoot中Gzip壓縮的兩種開(kāi)啟方式詳解的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot Gzip壓縮開(kāi)啟方式的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
spring-boot 多線程并發(fā)定時(shí)任務(wù)的解決方案
這篇文章主要介紹了spring-boot 多線程并發(fā)定時(shí)任務(wù)的解決方案,需要的朋友可以參考下2019-08-08
Spring?MVC中@Controller和@RequestMapping注解使用
這篇文章主要介紹了Spring?MVC中@Controller和@RequestMapping注解使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02
IDEA 中創(chuàng)建Spring Data Jpa 項(xiàng)目的示例代碼
這篇文章主要介紹了IDEA 中創(chuàng)建Spring Data Jpa 項(xiàng)目的示例代碼,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04
bootstrap.yml如何讀取nacos配置中心的配置文件
這篇文章主要介紹了bootstrap.yml讀取nacos配置中心的配置文件問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12
深入理解JVM之Class類(lèi)文件結(jié)構(gòu)詳解
這篇文章主要介紹了深入理解JVM之Class類(lèi)文件結(jié)構(gòu),結(jié)合實(shí)例形式詳細(xì)分析了Class類(lèi)文件結(jié)構(gòu)相關(guān)概念、原理、結(jié)構(gòu)、常用方法與屬性,需要的朋友可以參考下2019-09-09
Java 數(shù)據(jù)結(jié)構(gòu)與算法系列精講之字符串暴力匹配
字符串暴力匹配算法是指在一個(gè)長(zhǎng)字符串中暴力尋找是否包含某一子串所謂暴力匹配,就是不使用任何其他算法,將兩個(gè)字符串中的字符一一進(jìn)行比對(duì)2022-02-02
Flink結(jié)合Kafka實(shí)現(xiàn)通用流式數(shù)據(jù)處理
這篇文章將和大家一起深入探討Flink和Kafka的關(guān)系以及它們?cè)跀?shù)據(jù)流處理中的應(yīng)用,并提供一些最佳實(shí)踐和實(shí)際案例,希望對(duì)大家有一定的幫助2025-03-03

