Spring Boot 是 Spring 開源組織下的子項(xiàng)目,是 Spring 組件一站式解決方案,主要是簡化了使用 Spring 的難度,簡省了繁重的配置,提供了各種啟動(dòng)器,開發(fā)者能快速上手。
站在用戶的角度思考問題,與客戶深入溝通,找到林周網(wǎng)站設(shè)計(jì)與林周網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站建設(shè)、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、空間域名、網(wǎng)頁空間、企業(yè)郵箱。業(yè)務(wù)覆蓋林周地區(qū)。
Spring Boot 主要有如下優(yōu)點(diǎn):
啟動(dòng)類上面的注解是@SpringBootApplication,它也是 Spring Boot 的核心注解,主要組合包含了以下 3 個(gè)注解:
@SpringBootConfiguration:組合了 @Configuration 注解,實(shí)現(xiàn)配置文件的功能。
@EnableAutoConfiguration:打開自動(dòng)配置的功能,也可以關(guān)閉某個(gè)自動(dòng)配置的選項(xiàng),如關(guān)閉數(shù)據(jù)源自動(dòng)配置功能:
@SpringBootApplication(exclude= { DataSourceAutoConfiguration.class })。
@ComponentScan:Spring組件掃描。
Spring JavaConfig 是 Spring 社區(qū)的產(chǎn)品,它提供了配置 Spring IoC 容器的純Java 方法。因此它有助于避免使用 XML 配置。使用 JavaConfig 的優(yōu)點(diǎn)在于:
(1) 面向?qū)ο蟮呐渲谩S捎谂渲帽欢x為 JavaConfig 中的類,因此用戶可以
充分利用 Java 中的面向?qū)ο蟮墓δ?。一個(gè)配置類可以繼承另一個(gè),重寫它的
@Bean 方法等。
(2) 減少或消除 XML 配置?;谝蕾囎⑷朐瓌t的外化配置的好處已被證明。
但是,許多開發(fā)人員不希望在 XML 和 Java 之間來回切換。JavaConfig 為開發(fā)人員提供了一種純粹 Java 方法來配置與 XML 配置概念相似的 Spring 容器。從
技術(shù)角度來講,只是使用 JavaConfig 配置類來配置容器是可行的,但實(shí)際上很多人認(rèn)為將JavaConfig 與 XML 混合匹配是理想的。(3)類型安全和重構(gòu)友好。JavaConfig 提供了一種類型安全的方法來配置
Spring容器。由于 Java 5.0 對泛型的支持,現(xiàn)在可以按類型而不是按名稱檢索 bean,不需要任何強(qiáng)制轉(zhuǎn)換或基于字符串的查找。
BFPP:BeanFactoryPostProcessor
BPP:BeanPostProcessor
BDRPP:BeanDefinitionRegistryPostProcessor
表達(dá)的總體思路是:總-分-總
1、springboot自動(dòng)裝配是什么,解決了什么問題
2、自動(dòng)裝配實(shí)現(xiàn)的原理:
1、當(dāng)啟動(dòng)springboot應(yīng)用程序的時(shí)候, 會(huì)先創(chuàng)建SpringApplication的對象,在對象的構(gòu)造方法中會(huì)進(jìn)行某些參數(shù)的初始化工作,最主要的是判斷當(dāng)前應(yīng)用程序的類型以及初始化器和監(jiān)聽器,在這個(gè)過程中會(huì)加載整個(gè)應(yīng)用程序中的spring.factories文件,將文件的內(nèi)容放到緩存對象中,方便后續(xù)獲取。
2、SpringApplication對象創(chuàng)建完成之后,開始執(zhí)行run方法,來完成整個(gè)啟動(dòng),啟動(dòng)過程中最主要的有兩個(gè)方法,第一個(gè)叫做prepareContext,第二個(gè)叫做refreshContext,在這兩個(gè)關(guān)鍵步驟中完整了自動(dòng)裝配的核心功能,前面的處理邏輯包含了上下文對象的創(chuàng)建,banner的打印,異常報(bào)告期的準(zhǔn)備等各個(gè)準(zhǔn)備工作,方便后續(xù)來進(jìn)行調(diào)用。
3、在prepareContext方法中主要完成的是對上下文對象的初始化操作,包括了屬性值的設(shè)置,比如環(huán)境對象,在整個(gè)過程中有一個(gè)非常重要的方法,叫做load,load主要完成一件事,將當(dāng)前啟動(dòng)類做為一個(gè)beanDefinition注冊到registry中,方便后續(xù)在進(jìn)行BeanFactoryPostProcessor調(diào)用執(zhí)行的時(shí)候,找到對應(yīng)的主類,來完成@SpringBootApplicaiton,@EnableAutoConfiguration等注解的解析工作
4、在refreshContext方法中會(huì)進(jìn)行整個(gè)容器刷新過程,會(huì)調(diào)用中spring中的refresh方法,refresh中有13個(gè)非常關(guān)鍵的方法,來完成整個(gè)spring應(yīng)用程序的啟動(dòng),在自動(dòng)裝配過程中,會(huì)調(diào)用invokeBeanFactoryPostProcessor方法,在此方法中主要是對ConfigurationClassPostProcessor類的處理,這次是BFPP的子類也是BDRPP的子類,在調(diào)用的時(shí)候會(huì)先調(diào)用BDRPP中的postProcessBeanDefinitionRegistry方法,然后調(diào)用postProcessBeanFactory方法,在執(zhí)行postProcessBeanDefinitionRegistry的時(shí)候回解析處理各種注解,包含@PropertySource,@ComponentScan,@ComponentScans,@Bean,@Import等注解,最主要的是@Import注解的解析。
5、在解析@Import注解的時(shí)候,會(huì)有一個(gè)getImports的方法,從主類開始遞歸解析注解,把所有包含@Import的注解都解析到,然后在processImport方法中對Import的類進(jìn)行分類,此處主要識(shí)別的時(shí)候AutoConfigurationImportSelect歸屬于ImportSelect的子類,在后續(xù)過程中會(huì)調(diào)用deferredImportSelectorHandler中的process方法,來完整EnableAutoConfiguration的加載。
6、上面是我對springboot自動(dòng)裝配的簡單理解,面試官您看一下,我回答有沒有問題,幫我指點(diǎn)一下!
在 Spring Boot 里面,可以使用以下幾種方式來加載配置。
1) properties文件;
2) YAML文件;
3) 系統(tǒng)環(huán)境變量;
等等……
YAML 是一種人類可讀的數(shù)據(jù)序列化語言。它通常用于配置文件。與屬性文件相比,如果我們想要在配置文件中添加復(fù)雜的屬性,YAML 文件就更加結(jié)構(gòu)化,而且更少混淆。可以看出 YAML 具有分層配置數(shù)據(jù)。
YAML 現(xiàn)在可以算是非常流行的一種配置文件格式了,無論是前端還是后端,都可以見到 YAML 配置。那么 YAML 配置和傳統(tǒng)的 properties 配置相比到底有哪些優(yōu)勢呢?
相比 properties 配置文件,YAML 還有一個(gè)缺點(diǎn),就是不支持 @PropertySource 注解導(dǎo)入自定義的 YAML 配置。
Spring Boot 推薦使用 Java 配置而非 XML 配置,但是 Spring Boot 中也可以使用 XML 配置,通過 @ImportResource 注解可以引入一個(gè) XML 配置。 spring boot 核心配置文件是什么?
bootstrap.properties 和 application.properties 有何區(qū)別 ?
單純做 Spring Boot 開發(fā),可能不太容易遇到 bootstrap.properties 配置文
件,但是在結(jié)合 Spring Cloud 時(shí),這個(gè)配置就會(huì)經(jīng)常遇到了,特別是在需要加載一些遠(yuǎn)程配置文件的時(shí)侯。
spring boot 核心的兩個(gè)配置文件:
bootstrap (. yml 或者 . properties):boostrap 由父 ApplicationContext 加載的,比 applicaton 優(yōu)先加載,配置在應(yīng)用程序上下文的引導(dǎo)階段生效。一般來說我們在 Spring Cloud Config 或者 Nacos 中會(huì)用到它。且 boostrap 里面的屬性不
能被覆蓋;
application (. yml 或者 . properties): 由ApplicatonContext 加載,用于 spring boot 項(xiàng)目的自動(dòng)化配置。
Spring Profiles 允許用戶根據(jù)配置文件(dev,test,prod 等)來注冊 bean。因此,當(dāng)應(yīng)用程序在開發(fā)中運(yùn)行時(shí),只有某些 bean 可以加載,而在
PRODUCTION中,某些其他 bean 可以加載。假設(shè)我們的要求是 Swagger 文檔僅適用于 QA 環(huán)境,并且禁用所有其他文檔。這可以使用配置文件來完成。Spring Boot 使得使用配置文件非常簡單。
為了在自定義端口上運(yùn)行 Spring Boot 應(yīng)用程序,您可以在
application.properties 中指定端口。server.port = 8090
為了實(shí)現(xiàn) Spring Boot 的安全性,我們使用 spring-boot-starter-security 依賴項(xiàng),并且必須添加安全配置。它只需要很少的代碼。配置類將必須擴(kuò)展
WebSecurityConfigurerAdapter 并覆蓋其方法。
跨域可以在前端通過 JSONP 來解決,但是 JSONP 只可以發(fā)送 GET 請求,無法發(fā)送其他類型的請求,在 RESTful 風(fēng)格的應(yīng)用中,就顯得非常雞肋,因此我們推薦在后端通過 (CORS,Cross-origin resource sharing) 來解決跨域問題。這種解決方案并非 Spring Boot 特有的,在傳統(tǒng)的 SSM 框架中,就可以通過 CORS 來解決跨域問題,只不過之前我們是在 XML 文件中配置 CORS ,現(xiàn)在可以通過實(shí)現(xiàn)WebMvcConfigurer接口然后重寫addCorsMappings方法解決跨域問題。
項(xiàng)目中前后端分離部署,所以需要解決跨域的問題。
我們使用cookie存放用戶登錄的信息,在spring攔截器進(jìn)行權(quán)限控制,當(dāng)權(quán)限不符合時(shí),直接返回給用戶固定的json結(jié)果。
當(dāng)用戶登錄以后,正常使用;當(dāng)用戶退出登錄狀態(tài)時(shí)或者token過期時(shí),由于攔截器和跨域的順序有問題,出現(xiàn)了跨域的現(xiàn)象。
我們知道一個(gè)http請求,先走filter,到達(dá)servlet后才進(jìn)行攔截器的處理,如果我們把cors放在filter里,就可以優(yōu)先于權(quán)限攔截器執(zhí)行。
CSRF 代表跨站請求偽造。這是一種攻擊,迫使 終用戶在當(dāng)前通過身份驗(yàn)證的 Web 應(yīng)用程序上執(zhí)行不需要的操作。CSRF 攻擊專門針對狀態(tài)改變請求,而不是數(shù)據(jù)竊取,因?yàn)楣粽邿o法查看對偽造請求的響應(yīng)。
Spring boot actuator 是 spring 啟動(dòng)框架中的重要功能之一。Spring boot 監(jiān)視器可幫助您訪問生產(chǎn)環(huán)境中正在運(yùn)行的應(yīng)用程序的當(dāng)前狀態(tài)。有幾個(gè)指標(biāo)必須在生產(chǎn)環(huán)境中進(jìn)行檢查和監(jiān)控。即使一些外部應(yīng)用程序可能正在使用這些服務(wù)來向相關(guān)人員觸發(fā)警報(bào)消息。監(jiān)視器模塊公開了一組可直接作為 HTTP URL 訪問 的REST 端點(diǎn)來檢查狀態(tài)。
如何在 Spring Boot 中禁用 Actuator 端點(diǎn)安全性?
默認(rèn)情況下,所有敏感的 HTTP 端點(diǎn)都是安全的,只有具有 ACTUATOR 角色
的用戶才能訪問它們。安全性是使用標(biāo)準(zhǔn)的 HttpServletRequest.isUserInRole 方法實(shí)施的。 我們可以使用來禁用安全性。只有在執(zhí)行機(jī)構(gòu)端點(diǎn)在防火墻后訪問時(shí),才建議禁用安全性。
Spring Boot 提供監(jiān)視器端點(diǎn)以監(jiān)控各個(gè)微服務(wù)的度量。這些端點(diǎn)對于獲取有關(guān)應(yīng)用程序的信息(如它們是否已啟動(dòng))以及它們的組件(如數(shù)據(jù)庫等)是否正常運(yùn)行很有幫助。但是,使用監(jiān)視器的一個(gè)主要缺點(diǎn)或困難是,我們必須單獨(dú)打開應(yīng)用程序的知識(shí)點(diǎn)以了解其狀態(tài)或 健康 狀況。想象一下涉及 50 個(gè)應(yīng)用程序的微服務(wù),管理員將不得不擊中所有 50 個(gè)應(yīng)用程序的執(zhí)行終端。為了幫助我們處理這種情況,我們將使用位于的開源項(xiàng)目。 它建立在 Spring Boot Actuator 之上,它提供了一個(gè) Web UI,使我們能夠可視化多個(gè)應(yīng)用程序的度量。
WebSocket 是一種計(jì)算機(jī)通信協(xié)議,通過單個(gè) TCP 連接提供全雙工通信信道。
1、 WebSocket 是雙向的 -使用 WebSocket 客戶端或服務(wù)器可以發(fā)起消息發(fā)送。
2、 WebSocket 是全雙工的 -客戶端和服務(wù)器通信是相互獨(dú)立的。
3、 單個(gè) TCP 連接 -初始連接使用 HTTP,然后將此連接升級(jí)到基于套接字的連接。然后這個(gè)單一連接用于所有未來的通信
4、 Light -與 http 相比,WebSocket 消息數(shù)據(jù)交換要輕得多。
什么是 Spring Data ?
Spring Data 是 Spring 的一個(gè)子項(xiàng)目。用于簡化數(shù)據(jù)庫訪問,支持NoSQL 和 關(guān)系數(shù)據(jù)存儲(chǔ)。其主要目標(biāo)是使數(shù)據(jù)庫的訪問變得方便快捷。Spring Data 具有如下特點(diǎn):
SpringData 項(xiàng)目支持 NoSQL 存儲(chǔ):
SpringData 項(xiàng)目所支持的關(guān)系數(shù)據(jù)存儲(chǔ)技術(shù):
Spring Boot Batch 提供可重用的函數(shù),這些函數(shù)在處理大量記錄時(shí)非常重要,包括日志/跟蹤,事務(wù)管理,作業(yè)處理統(tǒng)計(jì)信息,作業(yè)重新啟動(dòng),跳過和資源管理。它還提供了更先進(jìn)的技術(shù)服務(wù)和功能,通過優(yōu)化和分區(qū)技術(shù),可以實(shí)現(xiàn)極高批量和高性能批處理作業(yè)。簡單以及復(fù)雜的大批量批處理作業(yè)可以高度可擴(kuò)展的方式利用框架處理重要大量的信息。
FreeMarker 是一個(gè)基于 Java 的模板引擎, 初專注于使用 MVC 軟件架構(gòu)進(jìn)行動(dòng)態(tài)網(wǎng)頁生成。使用 Freemarker 的主要優(yōu)點(diǎn)是表示層和業(yè)務(wù)層的完全分離。程序員可以處理應(yīng)用程序代碼,而設(shè)計(jì)人員可以處理 html 頁面設(shè)計(jì)。 后使用 freemarker 可以將這些結(jié)合起來,給出 終的輸出頁面。
對于集成 Spring Boot 和 ActiveMQ,我們使用依賴關(guān)系。 它只需要很少的配置,并且不需要樣板代碼。
Swagger 廣泛用于可視化 API,使用 Swagger UI 為前端開發(fā)人員提供在線沙箱。Swagger 是用于生成 RESTful Web 服務(wù)的可視化表示的工具,規(guī)范和完整框架實(shí)現(xiàn)。它使文檔能夠以與服務(wù)器相同的速度更新。當(dāng)通過 Swagger 正確定義時(shí),消費(fèi)者可以使用 少量的實(shí)現(xiàn)邏輯來理解遠(yuǎn)程服務(wù)并與其進(jìn)行交互。因此,Swagger消除了調(diào)用服務(wù)時(shí)的猜測。
前后端分離,如何維護(hù)接口文檔 ?
前后端分離開發(fā)日益流行,大部分情況下,我們都是通過 Spring Boot 做前后端分離開發(fā),前后端分離一定會(huì)有接口文檔,不然會(huì)前后端會(huì)深深陷入到扯皮中。一個(gè)比較笨的方法就是使用 word 或者 md 來維護(hù)接口文檔,但是效率太低,接口一變,所有人手上的文檔都得變。在 Spring Boot 中,這個(gè)問題常見
的解決方案是 Swagger ,使用 Swagger 我們可以快速生成一個(gè)接口文檔網(wǎng)
站,接口一旦發(fā)生變化,文檔就會(huì)自動(dòng)更新,所有開發(fā)工程師訪問這一個(gè)在線網(wǎng)站就可以獲取到 新的接口文檔,非常方便。
這可以使用 DEV 工具來實(shí)現(xiàn)。通過這種依賴關(guān)系,您可以節(jié)省任何更改,嵌入式tomcat 將重新啟動(dòng)。Spring Boot 有一個(gè)開發(fā)工具(DevTools)模塊,它有助于提高開發(fā)人員的生產(chǎn)力。Java 開發(fā)人員面臨的一個(gè)主要挑戰(zhàn)是將文件更改自動(dòng)部署到服務(wù)器并自動(dòng)重啟服務(wù)器。開發(fā)人員可以重新加載 Spring Boot 上的更改,而無需重新啟動(dòng)服務(wù)器。這將消除每次手動(dòng)部署更改的需要。
Spring Boot 在發(fā)布它的第一個(gè)版本時(shí)沒有這個(gè)功能。這是開發(fā)人員 需要的功能。DevTools 模塊完全滿足開發(fā)人員的需求。該模塊將在生產(chǎn)環(huán)境中被禁用。
它還提供 H2 數(shù)據(jù)庫控制臺(tái)以更好地測試應(yīng)用程序。
使用了下面的一些依賴項(xiàng)
spring-boot-starter-activemq
spring-boot-starter-security
這有助于增加更少的依賴關(guān)系,并減少版本的沖突。
Spring Boot 中的 starter 到底是什么 ?
首先,這個(gè) Starter 并非什么新的技術(shù)點(diǎn),基本上還是基于 Spring 已有功能來實(shí)現(xiàn)的。首先它提供了一個(gè)自動(dòng)化配置類,一般命名為 XXXAutoConfiguration
,在這個(gè)配置類中通過條件注解來決定一個(gè)配置是否生效(條件注解就是
Spring 中原本就有的),然后它還會(huì)提供一系列的默認(rèn)配置,也允許開發(fā)者根據(jù)實(shí)際情況自定義相關(guān)配置,然后通過類型安全的屬性注入將這些配置屬性注入進(jìn)來,新注入的屬性會(huì)代替掉默認(rèn)屬性。正因?yàn)槿绱?,很多第三方框架,我們只需要引入依賴就可以直接使用了。?dāng)然,開發(fā)者也可以自定義 Starter spring-boot-starter-parent 有什么用 ?
我們都知道,新創(chuàng)建一個(gè) Spring Boot 項(xiàng)目,默認(rèn)都是有 parent 的,這個(gè)
parent 就是 spring-boot-starter-parent ,spring-boot-starter-parent 主要有如下作用:
Spring Boot 打成的 jar 和普通的 jar 有什么區(qū)別 ?
Spring Boot 項(xiàng)目 終打包成的 jar 是可執(zhí)行 jar ,這種 jar 可以直接通過 java jar xxx.jar 命令來運(yùn)行,這種 jar 不可以作為普通的 jar 被其他項(xiàng)目依賴,即使依賴了也無法使用其中的類。
Spring Boot 的 jar 無法被其他項(xiàng)目依賴,主要還是他和普通 jar 的結(jié)構(gòu)不同。普通的 jar 包,解壓后直接就是包名,包里就是我們的代碼,而 Spring Boot
打包成的可執(zhí)行 jar 解壓后,在 BOOT-INFclasses 目錄下才是我們的代碼,因此無法被直接引用。如果非要引用,可以在 pom.xml 文件中增加配置,將 Spring Boot 項(xiàng)目打包成兩個(gè) jar ,一個(gè)可執(zhí)行,一個(gè)可引用。
1) 打包用命令或者放到容器中運(yùn)行
2) 用 Maven/ Gradle 插件運(yùn)行
3)直接執(zhí)行 main 方法運(yùn)行
1) 繼承spring-boot-starter-parent項(xiàng)目
2) 導(dǎo)入spring-boot-dependencies項(xiàng)目依賴
Spring 提供了一種使用 ControllerAdvice 處理異常的非常有用的方法。 我們通過實(shí)現(xiàn)一個(gè) ControlerAdvice 類,來處理控制器類拋出的所有異常。
使用 Spring Boot 實(shí)現(xiàn)分頁非常簡單。使用 Spring Data-JPA 可以實(shí)現(xiàn)將可分頁的傳遞給存儲(chǔ)庫方法。
微服務(wù)中如何實(shí)現(xiàn) session 共享 ?
在微服務(wù)中,一個(gè)完整的項(xiàng)目被拆分成多個(gè)不相同的獨(dú)立的服務(wù),各個(gè)服務(wù)獨(dú)立部署在不同的服務(wù)器上,各自的 session 被從物理空間上隔離開了,但是經(jīng)
常,我們需要在不同微服務(wù)之間共享 session ,常見的方案就是 Spring
Session + Redis 來實(shí)現(xiàn) session 共享。將所有微服務(wù)的 session 統(tǒng)一保存在 Redis 上,當(dāng)各個(gè)微服務(wù)對 session 有相關(guān)的讀寫操作時(shí),都去操作 Redis 上的 session 。這樣就實(shí)現(xiàn)了 session 共享,Spring Session 基于 Spring 中的代理過濾器實(shí)現(xiàn),使得 session 的同步操作對開發(fā)人員而言是透明的,非常簡便。
定時(shí)任務(wù)也是一個(gè)常見的需求,Spring Boot 中對于定時(shí)任務(wù)的支持主要還是來自 Spring 框架。
在 Spring Boot 中使用定時(shí)任務(wù)主要有兩種不同的方式,一個(gè)就是使用 Spring 中的 @Scheduled 注解,另一個(gè)則是使用第三方框架 Quartz。
使用 Spring 中的 @Scheduled 的方式主要通過 @Scheduled 注解來實(shí)現(xiàn)。
使用 Quartz ,則按照 Quartz 的方式,定義 Job 和 Trigger 即可。
nosql 處理 雜亂非結(jié)構(gòu)化數(shù)據(jù)設(shè)計(jì) 比 中國頁訪問信息 樓說 閹割sql acid 特性 快啊 比插入數(shù)據(jù) 相反些 交易數(shù)據(jù) 數(shù)據(jù)安全穩(wěn)定 壓倒切候 rdbms 顯現(xiàn)威力 rdbms 面nosql 些挑戰(zhàn) 力優(yōu)化 于些 非結(jié)構(gòu)化數(shù)據(jù)支持 比json 數(shù)據(jù) 同rdbms 于 olap and oltp 支持 要比 nosql快點(diǎn)半點(diǎn) 總結(jié) 世界定東西 mongodb nosql 數(shù)據(jù)庫吧 要用做稍微復(fù)雜幾統(tǒng)計(jì) 家睡醒 再
redis能否做數(shù)據(jù)庫用取決于如下幾個(gè)條件:
1:數(shù)據(jù)量,畢竟內(nèi)存數(shù)據(jù)庫,還是受限于內(nèi)存的容量,雖然可以redis可以持久化。
2:數(shù)據(jù)的結(jié)構(gòu),是否能夠?qū)㈥P(guān)系型數(shù)據(jù)結(jié)構(gòu)都轉(zhuǎn)換為key/value的形式。
3:查詢的效率,對范圍查詢等,是否能轉(zhuǎn)換為高效的hash索引查詢
redis能不能拿來當(dāng)數(shù)據(jù)庫,取決于你想要存儲(chǔ)什么數(shù)據(jù):
如果你打算存儲(chǔ)一些臨時(shí)數(shù)據(jù),數(shù)據(jù)規(guī)模不大,不需要太復(fù)雜的查詢,但是對性能的要求比較高,那可以拿redis當(dāng)數(shù)據(jù)庫使用。
否則別拿來當(dāng)數(shù)據(jù)庫用。
redis 能不能做數(shù)據(jù)庫,要看你具體的需求了:
1. 像上面提到的,redis的持久化有問題,如果使用aof模式,并且fsync always,則性能比mysql 還低,如果你喜歡redis 方便的數(shù)據(jù)結(jié)構(gòu)而對性能要求不高,或者性能要求很高,但允許一定程度的丟失數(shù)據(jù),則可以用redis做為數(shù)據(jù)庫。
2. redis 是內(nèi)存數(shù)據(jù)庫, 內(nèi)存寫滿后,數(shù)據(jù)不會(huì)存儲(chǔ)到硬盤上(VM 不穩(wěn)定,diskstore未啟用),如果你內(nèi)存足夠大,則可以用redis作為數(shù)據(jù)庫。
redis是一種k/v的內(nèi)存數(shù)據(jù)庫,適合小數(shù)據(jù)量的存儲(chǔ)以及實(shí)時(shí)要求高的地方,但是不適合做完整數(shù)據(jù)庫,完整數(shù)據(jù)庫基本上都有一套詳細(xì)解決方案,基本上沒有做了的,比如mysql。
項(xiàng)目里用到的redis是用來做緩存的,設(shè)置過期時(shí)間,到時(shí)就自動(dòng)清掉。數(shù)據(jù)庫還是用mysql等這種成熟的方案。
如果你非要用一種nosql來做數(shù)據(jù)庫,推薦你用Mongodb。
這種KV存儲(chǔ)完全不具備數(shù)據(jù)庫所能提供的數(shù)據(jù)安全性保障。
所以還是用來做緩存比較合適。
redis做數(shù)據(jù)庫不靠譜,不是所有的數(shù)據(jù)都是立即回寫磁盤的。
H2是Thomas Mueller提供的一個(gè)開源的、純java實(shí)現(xiàn)的關(guān)系數(shù)據(jù)庫。
H2是一個(gè)開源的嵌入式數(shù)據(jù)庫引擎,采用java語言編寫,不受平臺(tái)的限制,同時(shí)H2提供了一個(gè)十分方便的web控制臺(tái)用于操作和管理數(shù)據(jù)庫內(nèi)容。H2還提供兼容模式,可以兼容一些主流的數(shù)據(jù)庫,因此采用H2作為開發(fā)期的數(shù)據(jù)庫非常方便。
H2最大的用途在于可以同應(yīng)用程序打包在一起發(fā)布,這樣可以非常方便地存儲(chǔ)少量結(jié)構(gòu)化數(shù)據(jù)。
它的另一個(gè)用途是用于單元測試。啟動(dòng)速度快,而且可以關(guān)閉持久化功能,每一個(gè)用例執(zhí)行完隨即還原到初始狀態(tài)。
H2的第三個(gè)用處是作為緩存,作為NoSQL的一個(gè)補(bǔ)充。當(dāng)某些場景下數(shù)據(jù)模型必須為關(guān)系型,可以拿它當(dāng)Memcached使,作為后端MySQL/Oracle的一個(gè)緩沖層,緩存一些不經(jīng)常變化但需要頻繁訪問的數(shù)據(jù),比如字典表、權(quán)限表。不過這樣系統(tǒng)架構(gòu)就會(huì)比較復(fù)雜了。
擴(kuò)展資料:
H2數(shù)據(jù)庫運(yùn)行方式:
1、內(nèi)存模式
數(shù)據(jù)庫只在內(nèi)存中運(yùn)行,關(guān)閉連接后數(shù)據(jù)庫將被清空,適合測試環(huán)境,連接字符串:jdbc:h2:mem:DBName;DB_CLOSE_DELAY=-1,如果不指定DBName,則以私有方式啟動(dòng),只允許一個(gè)連接。
2、嵌入式
數(shù)據(jù)庫持久化存儲(chǔ)為單個(gè)文件。連接字符串:jdbc:h2:file:~/.h2/DBName;AUTO_SERVER=TRUE。~/.h2/DBName表示數(shù)據(jù)庫文件的存儲(chǔ)位置,如果第一次連接則會(huì)自動(dòng)創(chuàng)建數(shù)據(jù)庫。
3、服務(wù)模式
H2支持三種服務(wù)模式:web server:此種運(yùn)行方式支持使用瀏覽器訪問H2 Console。
CP server:支持客戶端/服務(wù)器端的連接方式。
PG server:支持PostgreSQL客戶端。
參考資料:百度百科-H2
文章題目:包含h2nosql的詞條
當(dāng)前地址:http://chinadenli.net/article42/hddchc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)、ChatGPT、品牌網(wǎng)站建設(shè)、網(wǎng)站改版、微信公眾號(hào)、自適應(yīng)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)