Redis 為什么面試都問,我卻不懂?因?yàn)樗靻幔?/h1>
1
Redis 為什么成為企業(yè)的選擇?
要知道 Redis 的作用我們要先知道它的誕生是用來解決的什么問題
1.Redis的誕生
隨著互聯(lián)網(wǎng)技術(shù)的飛速發(fā)展,云計(jì)算、云原生和大數(shù)據(jù)等概念一直不斷地回繞在我們耳邊,但相比話都說膩了的口號(hào),我們更清楚的是我們的互聯(lián)網(wǎng)應(yīng)用變快了,變復(fù)雜了,變得所需的資源、性能、操作模式舊的關(guān)系型數(shù)據(jù)庫已經(jīng)不能很好的滿足需求了。
這導(dǎo)致在當(dāng)今這個(gè)互聯(lián)網(wǎng)飛速發(fā)展的時(shí)代,所有企業(yè)對(duì)應(yīng)用的性能提出了更高的要求:
低延遲:復(fù)雜的應(yīng)用會(huì)極大的占用資源,但玩法的增多必然導(dǎo)致應(yīng)用的復(fù)雜,那么應(yīng)用快速地反應(yīng)能極大地提升用戶的滿意度。
大數(shù)據(jù):對(duì)于搜索、秒殺等等這樣大型應(yīng)用或活動(dòng)而言,需要利用PB級(jí)別的數(shù)據(jù)和能應(yīng)對(duì)百萬級(jí)的流量,傳統(tǒng)的關(guān)系型數(shù)據(jù)庫很難支持如此龐大流量的快速查詢。
分布式:系統(tǒng)管理員希望分布式應(yīng)用能更簡(jiǎn)單的部署和管理,分布式部署能帶來性能和效率上的提升,當(dāng)某個(gè)資源在多系統(tǒng)之間,具有共享性的時(shí)候,為了保證資源數(shù)據(jù)是一致的,我們需要控制多客戶端能互斥的對(duì)共享資源進(jìn)行訪問。
低成本:企業(yè)希望在硬件成本、軟件成本和人力成本能夠大幅度地降低,且之后的可擴(kuò)展性強(qiáng)。
為了克服這些問題,NoSQL應(yīng)運(yùn)而生,它同時(shí)具備了高性能、可擴(kuò)展性強(qiáng)、高可用等優(yōu)點(diǎn),受到廣泛開發(fā)人員和倉庫管理人員的青睞。
2.Redis是什么?
Redis 是完全開源的,遵守 BSD 協(xié)議,是一個(gè)高性能的 key-value 數(shù)據(jù)庫。Redis也是現(xiàn)在最受歡迎的NoSQL數(shù)據(jù)庫之一,Redis是一個(gè)使用ANSI C編寫的開源、包含多種數(shù)據(jù)結(jié)構(gòu)、支持網(wǎng)絡(luò)、基于內(nèi)存、可選持久性的鍵值對(duì)存儲(chǔ)數(shù)據(jù)庫。
Redis 與其他 key - value 緩存產(chǎn)品有以下三個(gè)特點(diǎn):
Redis支持?jǐn)?shù)據(jù)的持久化,可以將內(nèi)存中的數(shù)據(jù)保存在磁盤中,重啟的時(shí)候可以再次加載進(jìn)行使用。
Redis不僅僅支持簡(jiǎn)單的key-value類型的數(shù)據(jù),同時(shí)還提供list,set,zset,hash等數(shù)據(jù)結(jié)構(gòu)的存儲(chǔ)。
Redis支持?jǐn)?shù)據(jù)的備份,即master-slave模式的數(shù)據(jù)備份。
3.企業(yè)看重Redis什么?
★?Redis的優(yōu)勢(shì)
性能極高:Redis能讀的速度是110000次/s,寫的速度是81000次/s,可能滿足企業(yè)低延遲的需求 。
豐富的數(shù)據(jù)類型:Redis支持二進(jìn)制案例的 Strings, Lists,Hashes,Sets 及 Ordered Sets 數(shù)據(jù)類型操作。
原子:Redis的所有操作都是原子性的,同時(shí)Redis還支持對(duì)幾個(gè)操作合并后的原子性執(zhí)行,也就是說支持事務(wù)。
豐富的特性:Redis還支持 publish/subscribe,通知,key 過期等等特性。
不只有 Redis 一個(gè)產(chǎn)品,那么和其他產(chǎn)品不同在哪
★ Redis與其他key-value存儲(chǔ)有什么不同?
Redis有著更為復(fù)雜的數(shù)據(jù)結(jié)構(gòu)并且提供對(duì)他們的原子性操作,這是一個(gè)不同于其他數(shù)據(jù)庫的進(jìn)化路徑。Redis的數(shù)據(jù)類型都是基于基本數(shù)據(jù)結(jié)構(gòu)的同時(shí)對(duì)程序員透明,無需進(jìn)行額外的抽象。
Redis運(yùn)行在內(nèi)存中但是可以持久化到磁盤,所以在對(duì)不同數(shù)據(jù)集進(jìn)行高速讀寫時(shí)需要權(quán)衡內(nèi)存,因?yàn)閿?shù)據(jù)量不能大于硬件內(nèi)存。
相比在磁盤上相同的復(fù)雜的數(shù)據(jù)結(jié)構(gòu),在內(nèi)存中操作起來非常簡(jiǎn)單,這樣Redis可以做很多內(nèi)部復(fù)雜性很強(qiáng)的事情。
在磁盤格式方面他們是緊湊的以追加的方式產(chǎn)生的,因?yàn)樗麄儾⒉恍枰M(jìn)行隨機(jī)訪問。
?
2
為什么面試喜歡問Redis?
?
1. 為什么?
主要是因?yàn)楣ぷ骱髸?huì)發(fā)現(xiàn)到處都需要,使用場(chǎng)景廣泛
作為目前主流的NoSQL技術(shù),redis在多數(shù)編程語言中都得到了非常廣泛的使用,如果連Redis都沒用過,面試容易啞口無言很尷尬。
2. 常見面試題型
★?什么是redis?
Redis 是一個(gè)基于內(nèi)存的高性能key-value數(shù)據(jù)庫。?
★?Reids的特點(diǎn)?
Redis本質(zhì)上是一個(gè)Key-Value類型的內(nèi)存數(shù)據(jù)庫,整個(gè)數(shù)據(jù)庫統(tǒng)統(tǒng)加載在內(nèi)存當(dāng)中進(jìn)行操作,定期通過異步操作把數(shù)據(jù)庫數(shù)據(jù)flush到硬盤上進(jìn)行保存。
因?yàn)槭羌儍?nèi)存操作,Redis的性能非常出色,每秒可以處理超過 10萬次讀寫操作,是已知性能最快的Key-Value DB。
Redis的數(shù)據(jù)庫容量受到物理內(nèi)存的限制,不能用作海量數(shù)據(jù)的高性能讀寫。
Redis支持保存多種數(shù)據(jù)結(jié)構(gòu),此外單個(gè)value的最大限制是1GB,另外Redis也可以對(duì)存入的Key-Value設(shè)置過期時(shí)間.
★?使用redis有哪些好處?
簡(jiǎn)單來說就是?
1:速度快
2:數(shù)據(jù)類型多?
3:支持事務(wù)?
4 :特性多
2.使用場(chǎng)景
★?常見場(chǎng)景
1、緩存:毫無疑問這是Redis的主要場(chǎng)景,可以大幅服務(wù)器性能,減少人力成本、服務(wù)器成本。
2、排行榜:傳統(tǒng)的關(guān)系型數(shù)據(jù)庫來做排行榜,每次更新排名,就非常的麻煩,而利用Redis的有序集合數(shù)據(jù)結(jié)構(gòu)卻能夠簡(jiǎn)單的搞定。
3、計(jì)算器/限速器,利用Redis中原子性的自增操作,我們可以統(tǒng)計(jì)類似用戶點(diǎn)贊數(shù)、訪問數(shù)等等,而限速器比較典型的使用場(chǎng)景是限制用戶訪問頻率來降低秒殺活動(dòng)時(shí)的服務(wù)器請(qǐng)求壓力。
★?其他場(chǎng)景
1、好友關(guān)系,利用集合的一些命令,比如求交集、并集、差集等??梢苑奖愀愣ㄒ恍┕餐糜?、共同愛好之類的功能。
2、簡(jiǎn)單消息隊(duì)列,一些不需要高可靠的通知需求,但是大量數(shù)據(jù)會(huì)帶來極大的DB壓力,完全可以用List來完成異步解耦。
3、一些頻繁被訪問的數(shù)據(jù),放在redis中,利用redis 是放在內(nèi)存中的特性可以很高效的進(jìn)行訪問。
?
3
它為什么快?
通過前面的理解,我們發(fā)現(xiàn)它的高效訪問確實(shí)是企業(yè)與個(gè)人選擇它的主要理由,但是他依然有其他特別優(yōu)秀的方面與使用場(chǎng)景
1.為什么快?
Redis 是基于內(nèi)存的操作,CPU 不是 Redis 的瓶頸,Redis的瓶頸最有可能是機(jī)器的內(nèi)存的大小和網(wǎng)絡(luò)的帶寬,而且單線程的性能已經(jīng)非常高了,就沒有必要使用多線程了,所以 Redis 是單進(jìn)程單線程的。
提示:
如果我們運(yùn)行的服務(wù)器是多核服務(wù)器,為了充分利用多核優(yōu)勢(shì)我們可以在單臺(tái)服務(wù)器起多個(gè) Redis 服務(wù),或者架設(shè)主從復(fù)制、哨兵模式、集群模式等多機(jī)方案。
Redis 服務(wù)運(yùn)行時(shí)只是處理客戶端請(qǐng)求是單進(jìn)程單線程的,但是服務(wù)運(yùn)行時(shí)會(huì)有其他進(jìn)程或線程處理其他的事,比如RDB的文件的生成就會(huì)在子進(jìn)程中進(jìn)行等。
2.為什么這么快?
完全基于內(nèi)存,絕大部分請(qǐng)求是基于內(nèi)存的操作,而 Redis 的數(shù)據(jù)結(jié)構(gòu)是類似于HashMap,而 HashMap
的操作時(shí)間復(fù)雜度是O(1)
Redis 數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)簡(jiǎn)單,方便操作
使用單線程,避免了進(jìn)程或線程的上下文切換相關(guān)的消耗,不用考慮鎖相關(guān)問題消耗。
使用多路I/O復(fù)用模型,非阻塞IO
使用底層模型不同,底層實(shí)現(xiàn)方式以及與客戶端之間通信的應(yīng)用協(xié)議不一樣,Redis直接自己構(gòu)建了VM 機(jī)制 ,因?yàn)橐话愕南到y(tǒng)調(diào)用系統(tǒng)函數(shù)的話,會(huì)浪費(fèi)一定的時(shí)間去移動(dòng)和請(qǐng)求
相信看到這里你也明白了,Redis 為什么這么快,就是 Redis 這個(gè)數(shù)據(jù)庫最大的優(yōu)勢(shì)
4
總結(jié)
通過了解 Redis 為什么這么快,相信我們已經(jīng)很熟悉 Redis 的作用了,那么我們 Redis 的學(xué)習(xí)才剛剛開始,使用、精通、鉆研將是我們不斷的話題。
Redis 之路才剛剛開始。
來源:blog.csdn.net/moer0/article/details/122972132
瀏覽
48
1
Redis 為什么成為企業(yè)的選擇?
要知道 Redis 的作用我們要先知道它的誕生是用來解決的什么問題
1.Redis的誕生
隨著互聯(lián)網(wǎng)技術(shù)的飛速發(fā)展,云計(jì)算、云原生和大數(shù)據(jù)等概念一直不斷地回繞在我們耳邊,但相比話都說膩了的口號(hào),我們更清楚的是我們的互聯(lián)網(wǎng)應(yīng)用變快了,變復(fù)雜了,變得所需的資源、性能、操作模式舊的關(guān)系型數(shù)據(jù)庫已經(jīng)不能很好的滿足需求了。
這導(dǎo)致在當(dāng)今這個(gè)互聯(lián)網(wǎng)飛速發(fā)展的時(shí)代,所有企業(yè)對(duì)應(yīng)用的性能提出了更高的要求:
低延遲:復(fù)雜的應(yīng)用會(huì)極大的占用資源,但玩法的增多必然導(dǎo)致應(yīng)用的復(fù)雜,那么應(yīng)用快速地反應(yīng)能極大地提升用戶的滿意度。
大數(shù)據(jù):對(duì)于搜索、秒殺等等這樣大型應(yīng)用或活動(dòng)而言,需要利用PB級(jí)別的數(shù)據(jù)和能應(yīng)對(duì)百萬級(jí)的流量,傳統(tǒng)的關(guān)系型數(shù)據(jù)庫很難支持如此龐大流量的快速查詢。
分布式:系統(tǒng)管理員希望分布式應(yīng)用能更簡(jiǎn)單的部署和管理,分布式部署能帶來性能和效率上的提升,當(dāng)某個(gè)資源在多系統(tǒng)之間,具有共享性的時(shí)候,為了保證資源數(shù)據(jù)是一致的,我們需要控制多客戶端能互斥的對(duì)共享資源進(jìn)行訪問。
低成本:企業(yè)希望在硬件成本、軟件成本和人力成本能夠大幅度地降低,且之后的可擴(kuò)展性強(qiáng)。
為了克服這些問題,NoSQL應(yīng)運(yùn)而生,它同時(shí)具備了高性能、可擴(kuò)展性強(qiáng)、高可用等優(yōu)點(diǎn),受到廣泛開發(fā)人員和倉庫管理人員的青睞。
2.Redis是什么?
Redis 是完全開源的,遵守 BSD 協(xié)議,是一個(gè)高性能的 key-value 數(shù)據(jù)庫。Redis也是現(xiàn)在最受歡迎的NoSQL數(shù)據(jù)庫之一,Redis是一個(gè)使用ANSI C編寫的開源、包含多種數(shù)據(jù)結(jié)構(gòu)、支持網(wǎng)絡(luò)、基于內(nèi)存、可選持久性的鍵值對(duì)存儲(chǔ)數(shù)據(jù)庫。
Redis 與其他 key - value 緩存產(chǎn)品有以下三個(gè)特點(diǎn):
Redis支持?jǐn)?shù)據(jù)的持久化,可以將內(nèi)存中的數(shù)據(jù)保存在磁盤中,重啟的時(shí)候可以再次加載進(jìn)行使用。
Redis不僅僅支持簡(jiǎn)單的key-value類型的數(shù)據(jù),同時(shí)還提供list,set,zset,hash等數(shù)據(jù)結(jié)構(gòu)的存儲(chǔ)。
Redis支持?jǐn)?shù)據(jù)的備份,即master-slave模式的數(shù)據(jù)備份。
3.企業(yè)看重Redis什么?
★?Redis的優(yōu)勢(shì)
性能極高:Redis能讀的速度是110000次/s,寫的速度是81000次/s,可能滿足企業(yè)低延遲的需求 。
豐富的數(shù)據(jù)類型:Redis支持二進(jìn)制案例的 Strings, Lists,Hashes,Sets 及 Ordered Sets 數(shù)據(jù)類型操作。
原子:Redis的所有操作都是原子性的,同時(shí)Redis還支持對(duì)幾個(gè)操作合并后的原子性執(zhí)行,也就是說支持事務(wù)。
豐富的特性:Redis還支持 publish/subscribe,通知,key 過期等等特性。
不只有 Redis 一個(gè)產(chǎn)品,那么和其他產(chǎn)品不同在哪
★ Redis與其他key-value存儲(chǔ)有什么不同?
Redis有著更為復(fù)雜的數(shù)據(jù)結(jié)構(gòu)并且提供對(duì)他們的原子性操作,這是一個(gè)不同于其他數(shù)據(jù)庫的進(jìn)化路徑。Redis的數(shù)據(jù)類型都是基于基本數(shù)據(jù)結(jié)構(gòu)的同時(shí)對(duì)程序員透明,無需進(jìn)行額外的抽象。
Redis運(yùn)行在內(nèi)存中但是可以持久化到磁盤,所以在對(duì)不同數(shù)據(jù)集進(jìn)行高速讀寫時(shí)需要權(quán)衡內(nèi)存,因?yàn)閿?shù)據(jù)量不能大于硬件內(nèi)存。
相比在磁盤上相同的復(fù)雜的數(shù)據(jù)結(jié)構(gòu),在內(nèi)存中操作起來非常簡(jiǎn)單,這樣Redis可以做很多內(nèi)部復(fù)雜性很強(qiáng)的事情。
在磁盤格式方面他們是緊湊的以追加的方式產(chǎn)生的,因?yàn)樗麄儾⒉恍枰M(jìn)行隨機(jī)訪問。
?
2
為什么面試喜歡問Redis?
?
1. 為什么?
主要是因?yàn)楣ぷ骱髸?huì)發(fā)現(xiàn)到處都需要,使用場(chǎng)景廣泛
作為目前主流的NoSQL技術(shù),redis在多數(shù)編程語言中都得到了非常廣泛的使用,如果連Redis都沒用過,面試容易啞口無言很尷尬。
2. 常見面試題型
★?什么是redis?
Redis 是一個(gè)基于內(nèi)存的高性能key-value數(shù)據(jù)庫。?
★?Reids的特點(diǎn)?
Redis本質(zhì)上是一個(gè)Key-Value類型的內(nèi)存數(shù)據(jù)庫,整個(gè)數(shù)據(jù)庫統(tǒng)統(tǒng)加載在內(nèi)存當(dāng)中進(jìn)行操作,定期通過異步操作把數(shù)據(jù)庫數(shù)據(jù)flush到硬盤上進(jìn)行保存。
因?yàn)槭羌儍?nèi)存操作,Redis的性能非常出色,每秒可以處理超過 10萬次讀寫操作,是已知性能最快的Key-Value DB。
Redis的數(shù)據(jù)庫容量受到物理內(nèi)存的限制,不能用作海量數(shù)據(jù)的高性能讀寫。
Redis支持保存多種數(shù)據(jù)結(jié)構(gòu),此外單個(gè)value的最大限制是1GB,另外Redis也可以對(duì)存入的Key-Value設(shè)置過期時(shí)間.
★?使用redis有哪些好處?
簡(jiǎn)單來說就是?
1:速度快
2:數(shù)據(jù)類型多?
3:支持事務(wù)?
4 :特性多
2.使用場(chǎng)景
★?常見場(chǎng)景
1、緩存:毫無疑問這是Redis的主要場(chǎng)景,可以大幅服務(wù)器性能,減少人力成本、服務(wù)器成本。
2、排行榜:傳統(tǒng)的關(guān)系型數(shù)據(jù)庫來做排行榜,每次更新排名,就非常的麻煩,而利用Redis的有序集合數(shù)據(jù)結(jié)構(gòu)卻能夠簡(jiǎn)單的搞定。
3、計(jì)算器/限速器,利用Redis中原子性的自增操作,我們可以統(tǒng)計(jì)類似用戶點(diǎn)贊數(shù)、訪問數(shù)等等,而限速器比較典型的使用場(chǎng)景是限制用戶訪問頻率來降低秒殺活動(dòng)時(shí)的服務(wù)器請(qǐng)求壓力。
★?其他場(chǎng)景
1、好友關(guān)系,利用集合的一些命令,比如求交集、并集、差集等??梢苑奖愀愣ㄒ恍┕餐糜?、共同愛好之類的功能。
2、簡(jiǎn)單消息隊(duì)列,一些不需要高可靠的通知需求,但是大量數(shù)據(jù)會(huì)帶來極大的DB壓力,完全可以用List來完成異步解耦。
3、一些頻繁被訪問的數(shù)據(jù),放在redis中,利用redis 是放在內(nèi)存中的特性可以很高效的進(jìn)行訪問。
?
3
它為什么快?
通過前面的理解,我們發(fā)現(xiàn)它的高效訪問確實(shí)是企業(yè)與個(gè)人選擇它的主要理由,但是他依然有其他特別優(yōu)秀的方面與使用場(chǎng)景
1.為什么快?
Redis 是基于內(nèi)存的操作,CPU 不是 Redis 的瓶頸,Redis的瓶頸最有可能是機(jī)器的內(nèi)存的大小和網(wǎng)絡(luò)的帶寬,而且單線程的性能已經(jīng)非常高了,就沒有必要使用多線程了,所以 Redis 是單進(jìn)程單線程的。
提示:
如果我們運(yùn)行的服務(wù)器是多核服務(wù)器,為了充分利用多核優(yōu)勢(shì)我們可以在單臺(tái)服務(wù)器起多個(gè) Redis 服務(wù),或者架設(shè)主從復(fù)制、哨兵模式、集群模式等多機(jī)方案。
Redis 服務(wù)運(yùn)行時(shí)只是處理客戶端請(qǐng)求是單進(jìn)程單線程的,但是服務(wù)運(yùn)行時(shí)會(huì)有其他進(jìn)程或線程處理其他的事,比如RDB的文件的生成就會(huì)在子進(jìn)程中進(jìn)行等。
2.為什么這么快?
完全基于內(nèi)存,絕大部分請(qǐng)求是基于內(nèi)存的操作,而 Redis 的數(shù)據(jù)結(jié)構(gòu)是類似于HashMap,而 HashMap
的操作時(shí)間復(fù)雜度是O(1)
Redis 數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)簡(jiǎn)單,方便操作
使用單線程,避免了進(jìn)程或線程的上下文切換相關(guān)的消耗,不用考慮鎖相關(guān)問題消耗。
使用多路I/O復(fù)用模型,非阻塞IO
使用底層模型不同,底層實(shí)現(xiàn)方式以及與客戶端之間通信的應(yīng)用協(xié)議不一樣,Redis直接自己構(gòu)建了VM 機(jī)制 ,因?yàn)橐话愕南到y(tǒng)調(diào)用系統(tǒng)函數(shù)的話,會(huì)浪費(fèi)一定的時(shí)間去移動(dòng)和請(qǐng)求
相信看到這里你也明白了,Redis 為什么這么快,就是 Redis 這個(gè)數(shù)據(jù)庫最大的優(yōu)勢(shì)
4
總結(jié)
通過了解 Redis 為什么這么快,相信我們已經(jīng)很熟悉 Redis 的作用了,那么我們 Redis 的學(xué)習(xí)才剛剛開始,使用、精通、鉆研將是我們不斷的話題。
Redis 之路才剛剛開始。
來源:blog.csdn.net/moer0/article/details/122972132
