春暖花開面試季,吃透這些Redis筆記红省,讓你超越絕前面的面試者

1额各、什么是Redis?

Redis是一款內(nèi)存高速緩存數(shù)據(jù)庫吧恃。Redis全稱為:Remote? ? ?Dictionary? ? Server (遠程數(shù)據(jù)服務(wù))虾啦,使用C語言編寫,Redis是一個key-value存儲系統(tǒng)(鍵值存儲系統(tǒng))痕寓,支持豐富的數(shù)據(jù)類型傲醉,如:String、list呻率、set硬毕、zset、hash筷凤。? Redis是一種支持key-value等多種數(shù)據(jù)結(jié)構(gòu)的存儲系統(tǒng)昭殉。可用于緩存藐守,事件發(fā)布或訂閱挪丢,高速隊列等場景。使用C語言編寫卢厂,支持網(wǎng)絡(luò)乾蓬,提供字符串,哈希慎恒,列表任内,隊列,集合結(jié)構(gòu)直接存取融柬,基于內(nèi)存死嗦,可持久化。

2粒氧、Redis特點

1.? ?Redis以內(nèi)存作為數(shù)據(jù)存儲介質(zhì)越除,讀寫數(shù)據(jù)的效率極高。

2.? Redis跟memcache不同的是外盯,儲存在Redis中的數(shù)據(jù)是持久化的摘盆,斷電或重啟,數(shù)據(jù)也不會丟失饱苟。

3.? Redis的存儲分為內(nèi)存存儲孩擂、磁盤存儲和log文件。

4.? Redis可以從磁盤重新將數(shù)據(jù)加載到內(nèi)存中箱熬,也可以通過配置文件對其進行配置类垦,因此,redis才能實現(xiàn)持久化城须。

5.? Redis支持主從模式护锤,可以配置集群,更利于支撐大型的項目酿傍。

3烙懦、Redis支持哪幾種數(shù)據(jù)類型?

String赤炒、List氯析、Set、Sorted Set莺褒、hashes

4掩缓、Redis主要消耗什么物理資源?

redis是一種基于內(nèi)存高性能的數(shù)據(jù)庫--- 主要依賴于內(nèi)存內(nèi)存遵岩。

5·Redis應(yīng)用場景你辣,能做什么

?眾多語言都支持Redis巡通,因為Redis交換數(shù)據(jù)快,在服務(wù)器中常用來存儲一些需要頻繁調(diào)取的數(shù)據(jù)舍哄,節(jié)省內(nèi)存開銷宴凉,也極大的提升了速度。

將一些熱點數(shù)據(jù)存儲到Redis中表悬,要用的時候弥锄,直接從內(nèi)存取,極大的提高了速度和節(jié)約了服務(wù)器的開銷蟆沫。

? ? ? ? 1籽暇、會話緩存(最常用)?

? ? ? ? 2、消息隊列(支付)

? ? ? ? 3饭庞、活動排行榜或計數(shù)

? ? ? ? 4戒悠、發(fā)布,訂閱消息(消息通知)

? ? ? ? 5舟山、商品列表救崔,評論列表

6、Redis有哪幾種數(shù)據(jù)淘汰策略捏顺?

noeviction:返回錯誤當內(nèi)存限制達到并且客戶端嘗試執(zhí)行會讓更多內(nèi)存被使用的命令(大部分的寫入指令六孵,但DEL和幾個例外)allkeys-lru: 嘗試回收最少使用的鍵(LRU),使得新添加的數(shù)據(jù)有空間存放幅骄。volatile-lru: 嘗試回收最少使用的鍵(LRU)劫窒,但僅限于在過期集合的鍵,使得新添加的數(shù)據(jù)有空間存放。allkeys-random: 回收隨機的鍵使得新添加的數(shù)據(jù)有空間存放拆座。volatile-random: 回收隨機的鍵使得新添加的數(shù)據(jù)有空間存放主巍,但僅限于在過期集合的鍵。volatile-ttl: 回收在過期集合的鍵挪凑,并且優(yōu)先回收存活時間(TTL)較短的鍵,使得新添加的數(shù)據(jù)有空間存放孕索。

7、Redis官方為什么不提供Windows版本躏碳?

因為目前Linux版本已經(jīng)相當穩(wěn)定搞旭,而且用戶量很大,無需開發(fā)windows版本菇绵,反而會帶來兼容性等問題肄渗。

8、一個字符串類型的值能存儲最大容量是多少咬最?

512M

9翎嫡、為什么Redis需要把所有數(shù)據(jù)放到內(nèi)存中?

Redis為了達到最快的讀寫速度將數(shù)據(jù)都讀到內(nèi)存中永乌,并通過異步的方式將數(shù)據(jù)寫入磁盤惑申。所以redis具有快速和數(shù)據(jù)持久化的特征具伍。如果不將數(shù)據(jù)放在內(nèi)存中,磁盤I/O速度為嚴重影響redis的性能圈驼。在內(nèi)存越來越便宜的今天人芽,redis將會越來越受歡迎。

如果設(shè)置了最大使用的內(nèi)存碗脊,則數(shù)據(jù)已有記錄數(shù)達到內(nèi)存限值后不能繼續(xù)插入新值啼肩。

10橄妆、Redis集群方案應(yīng)該怎么做衙伶?都有哪些方案?

1.twemproxy害碾,大概概念是矢劲,它類似于一個代理方式,使用方法和普通redis無任何區(qū)別慌随,設(shè)置好它下屬的多個redis實例后芬沉,使用時在本需要連接redis的地方改為連接twemproxy,它會以一個代理的身份接收請求并使用一致性hash算法阁猜,將請求轉(zhuǎn)接到具體redis丸逸,將結(jié)果再返回twemproxy。使用方式簡便(相對redis只需修改連接端口)剃袍,對舊項目擴展的首選黄刚。 問題:twemproxy自身單端口實例的壓力,使用一致性hash后民效,對redis節(jié)點數(shù)量改變時候的計算值的改變憔维,數(shù)據(jù)無法自動移動到新的節(jié)點。

2.codis畏邢,目前用的最多的集群方案业扒,基本和twemproxy一致的效果,但它支持在 節(jié)點數(shù)量改變情況下舒萎,舊節(jié)點數(shù)據(jù)可恢復(fù)到新hash節(jié)點程储。

3.redis cluster3.0自帶的集群,特點在于他的分布式算法不是一致性hash臂寝,而是hash槽的概念虱肄,以及自身支持節(jié)點設(shè)置從節(jié)點。具體看官方文檔介紹交煞。

4.在業(yè)務(wù)代碼層實現(xiàn)咏窿,起幾個毫無關(guān)聯(lián)的redis實例,在代碼層素征,對key 進行hash計算集嵌,然后去對應(yīng)的redis實例操作數(shù)據(jù)萝挤。 這種方式對hash層代碼要求比較高,考慮部分包括根欧,節(jié)點失效后的替代算法方案怜珍,數(shù)據(jù)震蕩后的自動腳本恢復(fù),實例的監(jiān)控凤粗,等等酥泛。

11、Redis集群方案什么情況下會導(dǎo)致整個集群不可用嫌拣?

有A柔袁,B,C三個節(jié)點的集群,在沒有復(fù)制模型的情況下,如果節(jié)點B失敗了异逐,那么整個集群就會以為缺少5501-11000這個范圍的槽而不可用捶索。

12、MySQL里有2000w數(shù)據(jù)灰瞻,redis中只存20w的數(shù)據(jù)腥例,如何保證redis中的數(shù)據(jù)都是熱點數(shù)據(jù)?

redis內(nèi)存數(shù)據(jù)集大小上升到一定大小的時候酝润,就會施行數(shù)據(jù)淘汰策略燎竖。

13、Redis有哪些適合的場景要销?

(1)构回、會話緩存(Session Cache)最常用的一種使用Redis的情景是會話緩存(session cache)。用Redis緩存會話比其他存儲(如Memcached)的優(yōu)勢在于:Redis提供持久化蕉陋。當維護一個不是嚴格要求一致性的緩存時捐凭,如果用戶的購物車信息全部丟失,大部分人都會不高興的凳鬓,現(xiàn)在茁肠,他們還會這樣嗎?幸運的是缩举,隨著 Redis 這些年的改進垦梆,很容易找到怎么恰當?shù)氖褂肦edis來緩存會話的文檔。甚至廣為人知的商業(yè)平臺Magento也提供Redis的插件仅孩。

(2)托猩、全頁緩存(FPC)除基本的會話token之外,Redis還提供很簡便的FPC平臺辽慕【┬龋回到一致性問題,即使重啟了Redis實例溅蛉,因為有磁盤的持久化公浪,用戶也不會看到頁面加載速度的下降他宛,這是一個極大改進,類似PHP本地FPC欠气。再次以Magento為例厅各,Magento提供一個插件來使用Redis作為全頁緩存后端。此外预柒,對WordPress的用戶來說队塘,Pantheon有一個非常好的插件 wp-redis,這個插件能幫助你以最快速度加載你曾瀏覽過的頁面宜鸯。

(3)憔古、隊列Reids在內(nèi)存存儲引擎領(lǐng)域的一大優(yōu)點是提供 list 和 set 操作,這使得Redis能作為一個很好的消息隊列平臺來使用顾翼。Redis作為隊列使用的操作投放,就類似于本地程序語言(如Python)對 list 的 push/pop 操作奈泪。如果你快速的在Google中搜索“Redis queues”适贸,你馬上就能找到大量的開源項目,這些項目的目的就是利用Redis創(chuàng)建非常好的后端工具涝桅,以滿足各種隊列需求拜姿。例如,Celery有一個后臺就是使用Redis作為broker冯遂,你可以從這里去查看蕊肥。

(4),排行榜/計數(shù)器Redis在內(nèi)存中對數(shù)字進行遞增或遞減的操作實現(xiàn)的非常好蛤肌。集合(Set)和有序集合(Sorted Set)也使得我們在執(zhí)行這些操作的時候變的非常簡單壁却,Redis只是正好提供了這兩種數(shù)據(jù)結(jié)構(gòu)。所以裸准,我們要從排序集合中獲取到排名最靠前的10個用戶–我們稱之為“user_scores”展东,我們只需要像下面一樣執(zhí)行即可:當然炒俱,這是假定你是根據(jù)你用戶的分數(shù)做遞增的排序盐肃。如果你想返回用戶及用戶的分數(shù),你需要這樣執(zhí)行:ZRANGE user_scores 0 10 WITHSCORESAgora Games就是一個很好的例子权悟,用Ruby實現(xiàn)的砸王,它的排行榜就是使用Redis來存儲數(shù)據(jù)的,你可以在這里看到峦阁。

(5)谦铃、發(fā)布/訂閱最后(但肯定不是最不重要的)是Redis的發(fā)布/訂閱功能。發(fā)布/訂閱的使用場景確實非常多榔昔。我已看見人們在社交網(wǎng)絡(luò)連接中使用驹闰,還可作為基于發(fā)布/訂閱的腳本觸發(fā)器凿跳,甚至用Redis的發(fā)布/訂閱功能來建立聊天系統(tǒng)!(不疮方,這是真的控嗜,你可以去核實)。

14骡显、Redis支持的Java客戶端都有哪些疆栏?官方推薦用哪個?

Redisson惫谤、Jedis壁顶、lettuce等等,官方推薦使用Redisson溜歪。

15若专、Redis和Redisson有什么關(guān)系?

Redisson是一個高級的分布式協(xié)調(diào)Redis客服端蝴猪,能幫助用戶在分布式環(huán)境中輕松實現(xiàn)一些Java的對象 (Bloom filter, BitSet, Set, SetMultimap, ScoredSortedSet, SortedSet, Map, ConcurrentMap, List, ListMultimap, Queue, BlockingQueue, Deque, BlockingDeque, Semaphore, Lock, ReadWriteLock, AtomicLong, CountDownLatch, Publish / Subscribe, HyperLogLog)调衰。

16、Jedis與Redisson對比有什么優(yōu)缺點自阱?

Jedis是Redis的Java實現(xiàn)的客戶端嚎莉,其API提供了比較全面的Redis命令的支持;Redisson實現(xiàn)了分布式和可擴展的Java數(shù)據(jù)結(jié)構(gòu)沛豌,和Jedis相比趋箩,功能較為簡單,不支持字符串操作加派,不支持排序叫确、事務(wù)、管道芍锦、分區(qū)等Redis特性竹勉。Redisson的宗旨是促進使用者對Redis的關(guān)注分離,從而讓使用者能夠?qū)⒕Ω械胤旁谔幚順I(yè)務(wù)邏輯上醉旦。

17饶米、Redis如何設(shè)置密碼及驗證密碼?

設(shè)置密碼:config set requirepass 123456授權(quán)密碼:auth 123456

18车胡、說說Redis哈希槽的概念檬输?

Redis集群沒有使用一致性hash,而是引入了哈希槽的概念,Redis集群有16384個哈希槽匈棘,每個key通過CRC16校驗后對16384取模來決定放置哪個槽丧慈,集群的每個節(jié)點負責(zé)一部分hash槽。

19、Redis集群的主從復(fù)制模型是怎樣的逃默?

為了使在部分節(jié)點失敗或者大部分節(jié)點無法通信的情況下集群仍然可用鹃愤,所以集群使用了主從復(fù)制模型,每個節(jié)點都會有N-1個復(fù)制品.

20、Redis集群會有寫操作丟失嗎完域?為什么软吐?

Redis并不能保證數(shù)據(jù)的強一致性,這意味這在實際中集群在特定的條件下可能會丟失寫操作吟税。

21凹耙、Redis集群之間是如何復(fù)制的?

異步復(fù)制

22肠仪、Redis集群最大節(jié)點個數(shù)是多少肖抱?

16384個。

23异旧、Redis集群如何選擇數(shù)據(jù)庫意述?

Redis集群目前無法做數(shù)據(jù)庫選擇,默認在0數(shù)據(jù)庫吮蛹。

24荤崇、怎么測試Redis的連通性?

ping

25匹涮、Redis中的管道有什么用天试?

一次請求/響應(yīng)服務(wù)器能實現(xiàn)處理新的請求即使舊的請求還未被響應(yīng)槐壳。這樣就可以將多個命令發(fā)送到服務(wù)器然低,而不用等待回復(fù),最后在一個步驟中讀取該答復(fù)务唐。這就是管道(pipelining)雳攘,是一種幾十年來廣泛使用的技術(shù)。例如許多POP3協(xié)議已經(jīng)實現(xiàn)支持這個功能枫笛,大大加快了從服務(wù)器下載新郵件的過程吨灭。

26、怎么理解Redis事務(wù)刑巧?

事務(wù)是一個單獨的隔離操作:事務(wù)中的所有命令都會序列化喧兄、按順序地執(zhí)行浩姥。事務(wù)在執(zhí)行的過程中只估,不會被其他客戶端發(fā)送來的命令請求所打斷。事務(wù)是一個原子操作:事務(wù)中的命令要么全部被執(zhí)行秽梅,要么全部都不執(zhí)行

恭理。

27拯辙、Redis事務(wù)相關(guān)的命令有哪幾個?

MULTI颜价、EXEC涯保、DISCARD诉濒、WATCH ##28、Redis key的過期時間和永久有效分別怎么設(shè)置夕春? EXPIRE和PERSIST命令未荒。

29、Redis如何做內(nèi)存優(yōu)化及志?

盡可能使用散列表(hashes)茄猫,散列表(是說散列表里面存儲的數(shù)少)使用的內(nèi)存非常小,所以你應(yīng)該盡可能的將你的數(shù)據(jù)模型抽象到一個散列表里面困肩。比如你的web系統(tǒng)中有一個用戶對象划纽,不要為這個用戶的名稱,姓氏锌畸,郵箱勇劣,密碼設(shè)置單獨的key,而是應(yīng)該把這個用戶的所有信息存儲到一張散列表里面.

30、Redis回收進程如何工作的潭枣?

一個客戶端運行了新的命令比默,添加了新的數(shù)據(jù)。Redi檢查內(nèi)存使用情況盆犁,如果大于maxmemory的限制, 則根據(jù)設(shè)定好的策略進行回收命咐。一個新的命令被執(zhí)行,等等谐岁。所以我們不斷地穿越內(nèi)存限制的邊界醋奠,通過不斷達到邊界然后不斷地回收回到邊界以下。如果一個命令的結(jié)果導(dǎo)致大量內(nèi)存被使用(例如很大的集合的交集保存到一個新的鍵)伊佃,不用多久內(nèi)存限制就會被這個內(nèi)存使用量超越窜司。

31、Redis回收使用的是什么算法航揉?

**LRU算法

32塞祈、Redis如何做大量數(shù)據(jù)插入?

Redis2.6開始redis-cli支持一種新的被稱之為pipe mode的新模式用于執(zhí)行大量數(shù)據(jù)插入工作帅涂。

33议薪、為什么要做Redis分區(qū)?

分區(qū)可以讓Redis管理更大的內(nèi)存媳友,Redis將可以使用所有機器的內(nèi)存斯议。如果沒有分區(qū),你最多只能使用一臺機器的內(nèi)存庆锦。分區(qū)使Redis的計算能力通過簡單地增加計算機得到成倍提升,Redis的網(wǎng)絡(luò)帶寬也會隨著計算機和網(wǎng)卡的增加而成倍增長捅位。

34、你知道有哪些Redis分區(qū)實現(xiàn)方案?

客戶端分區(qū)就是在客戶端就已經(jīng)決定數(shù)據(jù)會被存儲到哪個redis節(jié)點或者從哪個redis節(jié)點讀取艇搀。大多數(shù)客戶端已經(jīng)實現(xiàn)了客戶端分區(qū)尿扯。代理分區(qū) 意味著客戶端將請求發(fā)送給代理,然后代理決定去哪個節(jié)點寫數(shù)據(jù)或者讀數(shù)據(jù)焰雕。代理根據(jù)分區(qū)規(guī)則決定請求哪些Redis實例衷笋,然后根據(jù)Redis的響應(yīng)結(jié)果返回給客戶端。redis和memcached的一種代理實現(xiàn)就是Twemproxy查詢路由(Query routing) 的意思是客戶端隨機地請求任意一個redis實例矩屁,然后由Redis將請求轉(zhuǎn)發(fā)給正確的Redis節(jié)點辟宗。Redis Cluster實現(xiàn)了一種混合形式的查詢路由,但并不是直接將請求從一個redis節(jié)點轉(zhuǎn)發(fā)到另一個redis節(jié)點吝秕,而是在客戶端的幫助下直接redirected到正確的redis節(jié)點泊脐。

35、Redis分區(qū)有什么缺點烁峭?

涉及多個key的操作通常不會被支持容客。例如你不能對兩個集合求交集,因為他們可能被存儲到不同的Redis實例(實際上這種情況也有辦法约郁,但是不能直接使用交集指令)缩挑。同時操作多個key,則不能使用Redis事務(wù).分區(qū)使用的粒度是key,不能使用一個非常長的排序key存儲一個數(shù)據(jù)集(The partitioning granularity is the key, so it is not possible to shard a dataset with a single huge key like a very big sorted set).當使用分區(qū)的時候鬓梅,數(shù)據(jù)處理會非常復(fù)雜供置,例如為了備份你必須從不同的Redis實例和主機同時收集RDB / AOF文件。分區(qū)時動態(tài)擴容或縮容可能非常復(fù)雜绽快。Redis集群在運行時增加或者刪除Redis節(jié)點芥丧,能做到最大程度對用戶透明地數(shù)據(jù)再平衡,但其他一些客戶端分區(qū)或者代理分區(qū)方法則不支持這種特性谎僻。然而娄柳,有一種預(yù)分片的技術(shù)也可以較好的解決這個問題。

36艘绍、Redis持久化數(shù)據(jù)和緩存怎么做擴容?

如果Redis被當做緩存使用秫筏,使用一致性哈希實現(xiàn)動態(tài)擴容縮容诱鞠。如果Redis被當做一個持久化存儲使用,必須使用固定的keys-to-nodes映射關(guān)系这敬,節(jié)點的數(shù)量一旦確定不能變化航夺。否則的話(即Redis節(jié)點需要動態(tài)變化的情況),必須使用可以在運行時進行數(shù)據(jù)再平衡的一套系統(tǒng)崔涂,而當前只有Redis集群可以做到這樣阳掐。

37、分布式Redis是前期做還是后期規(guī)模上來了再做好?為什么缭保?

既然Redis是如此的輕量(單實例只使用1M內(nèi)存),為防止以后的擴容汛闸,最好的辦法就是一開始就啟動較多實例。即便你只有一臺服務(wù)器艺骂,你也可以一開始就讓Redis以分布式的方式運行诸老,使用分區(qū),在同一臺服務(wù)器上啟動多個實例钳恕。一開始就多設(shè)置幾個Redis實例别伏,例如32或者64個實例,對大多數(shù)用戶來說這操作起來可能比較麻煩忧额,但是從長久來看做這點犧牲是值得的厘肮。這樣的話,當你的數(shù)據(jù)不斷增長睦番,需要更多的Redis服務(wù)器時轴脐,你需要做的就是僅僅將Redis實例從一臺服務(wù)遷移到另外一臺服務(wù)器而已(而不用考慮重新分區(qū)的問題)。一旦你添加了另一臺服務(wù)器抡砂,你需要將你一半的Redis實例從第一臺機器遷移到第二臺機器大咱。

38、Twemproxy是什么注益?

Twemproxy是Twitter維護的(緩存)代理系統(tǒng)碴巾,代理Memcached的ASCII協(xié)議和Redis協(xié)議。它是單線程程序丑搔,使用c語言編寫厦瓢,運行起來非常快啤月。它是采用Apache 2.0 license的開源軟件煮仇。 Twemproxy支持自動分區(qū),如果其代理的其中一個Redis節(jié)點不可用時谎仲,會自動將該節(jié)點排除(這將改變原來的keys-instances的映射關(guān)系浙垫,所以你應(yīng)該僅在把Redis當緩存時使用Twemproxy)。 Twemproxy本身不存在單點問題郑诺,因為你可以啟動多個Twemproxy實例夹姥,然后讓你的客戶端去連接任意一個Twemproxy實例。 Twemproxy是Redis客戶端和服務(wù)器端的一個中間層辙诞,由它來處理分區(qū)功能應(yīng)該不算復(fù)雜辙售,并且應(yīng)該算比較可靠的。

39飞涂、支持一致性哈希的客戶端有哪些旦部?

Redis-rb祈搜、Predis等。

40士八、Redis與其他key-value存儲有什么不同容燕?

Redis有著更為復(fù)雜的數(shù)據(jù)結(jié)構(gòu)并且提供對他們的原子性操作,這是一個不同于其他數(shù)據(jù)庫的進化路徑曹铃。Redis的數(shù)據(jù)類型都是基于基本數(shù)據(jù)結(jié)構(gòu)的同時對程序員透明缰趋,無需進行額外的抽象。Redis運行在內(nèi)存中但是可以持久化到磁盤陕见,所以在對不同數(shù)據(jù)集進行高速讀寫時需要權(quán)衡內(nèi)存秘血,應(yīng)為數(shù)據(jù)量不能大于硬件內(nèi)存。在內(nèi)存數(shù)據(jù)庫方面的另一個優(yōu)點是评甜, 相比在磁盤上相同的復(fù)雜的數(shù)據(jù)結(jié)構(gòu)灰粮,在內(nèi)存中操作起來非常簡單,這樣Redis可以做很多內(nèi)部復(fù)雜性很強的事情忍坷。 同時粘舟,在磁盤格式方面他們是緊湊的以追加的方式產(chǎn)生的,因為他們并不需要進行隨機訪問佩研。

41柑肴、Redis的內(nèi)存占用情況怎么樣?

給你舉個例子: 100萬個鍵值對(鍵是0到999999值是字符串“hello world”)在我的32位的Mac筆記本上 用了100MB旬薯。同樣的數(shù)據(jù)放到一個key里只需要16MB晰骑, 這是因為鍵值有一個很大的開銷。 在Memcached上執(zhí)行也是類似的結(jié)果绊序,但是相對Redis的開銷要小一點點硕舆,因為Redis會記錄類型信息引用計數(shù)等等。當然骤公,大鍵值對時兩者的比例要好很多抚官。64位的系統(tǒng)比32位的需要更多的內(nèi)存開銷,尤其是鍵值對都較小時阶捆,這是因為64位的系統(tǒng)里指針占用了8個字節(jié)凌节。 但是,當然趁猴,64位系統(tǒng)支持更大的內(nèi)存刊咳,所以為了運行大型的Redis服務(wù)器或多或少的需要使用64位的系統(tǒng)。

42儡司、都有哪些辦法可以降低Redis的內(nèi)存使用情況呢?

如果你使用的是32位的Redis實例余指,可以好好利用Hash,list,sorted set,set等集合類型數(shù)據(jù)捕犬,因為通常情況下很多小的Key-Value可以用更緊湊的方式存放到一起跷坝。

##43、查看Redis使用情況及狀態(tài)信息用什么命令碉碉?info44柴钻、Redis的內(nèi)存用完了會發(fā)生什么? 如果達到設(shè)置的上限垢粮,Redis的寫命令會返回錯誤信息(但是讀命令還可以正常返回贴届。)或者你可以將Redis當緩存來使用配置淘汰機制,當Redis達到內(nèi)存上限時會沖刷掉舊的內(nèi)容蜡吧。## 45毫蚓、Redis是單線程的,如何提高多核CPU的利用率昔善? 可以在同一個服務(wù)器部署多個Redis的實例元潘,并把他們當作不同的服務(wù)器來使用,在某些時候君仆,無論如何一個服務(wù)器是不夠的翩概, 所以,如果你想使用多個CPU返咱,你可以考慮一下分片(shard)钥庇。

46、一個Redis實例最多能存放多少的keys咖摹?

List评姨、Set、Sorted Set他們最多能存放多少元素楞艾?理論上Redis可以處理多達232的keys参咙,并且在實際中進行了測試,每個實例至少存放了2億5千萬的keys硫眯。我們正在測試一些較大的值蕴侧。任何list、set两入、和sorted set都可以放232個元素净宵。換句話說,Redis的存儲極限是系統(tǒng)中的可用內(nèi)存值裹纳。

47择葡、Redis常見性能問題和解決方案?

(1) Master最好不要做任何持久化工作剃氧,如RDB內(nèi)存快照和AOF日志文件 (2) 如果數(shù)據(jù)比較重要敏储,某個Slave開啟AOF備份數(shù)據(jù),策略設(shè)置為每秒同步一次 (3) 為了主從復(fù)制的速度和連接的穩(wěn)定性朋鞍,Master和Slave最好在同一個局域網(wǎng)內(nèi) (4) 盡量避免在壓力很大的主庫上增加從庫 (5) 主從復(fù)制不要用圖狀結(jié)構(gòu)已添,用單向鏈表結(jié)構(gòu)更為穩(wěn)定妥箕,即:Master <- Slave1 <- Slave2 <- Slave3...這樣的結(jié)構(gòu)方便解決單點故障問題,實現(xiàn)Slave對Master的替換更舞。如果Master掛了畦幢,可以立刻啟用Slave1做Master,其他不變缆蝉。

48宇葱、Redis提供了哪幾種持久化方式?

RDB持久化方式能夠在指定的時間間隔能對你的數(shù)據(jù)進行快照存儲.AOF持久化方式記錄每次對服務(wù)器寫的操作,當服務(wù)器重啟的時候會重新執(zhí)行這些命令來恢復(fù)原始的數(shù)據(jù),AOF命令以redis協(xié)議追加保存每次寫的操作到文件末尾.Redis還能對AOF文件進行后臺重寫,使得AOF文件的體積不至于過大.如果你只希望你的數(shù)據(jù)在服務(wù)器運行的時候存在,你也可以不使用任何持久化方式.你也可以同時開啟兩種持久化方式, 在這種情況下, 當redis重啟的時候會優(yōu)先載入AOF文件來恢復(fù)原始的數(shù)據(jù),因為在通常情況下AOF文件保存的數(shù)據(jù)集要比RDB文件保存的數(shù)據(jù)集要完整.最重要的事情是了解RDB和AOF持久化方式的不同,讓我們以RDB持久化方式開始刊头。

49黍瞧、如何選擇合適的持久化方式?

一般來說芽偏, 如果想達到足以媲美PostgreSQL的數(shù)據(jù)安全性雷逆, 你應(yīng)該同時使用兩種持久化功能。如果你非常關(guān)心你的數(shù)據(jù)污尉, 但仍然可以承受數(shù)分鐘以內(nèi)的數(shù)據(jù)丟失膀哲,那么你可以只使用RDB持久化。有很多用戶都只使用AOF持久化被碗,但并不推薦這種方式:因為定時生成RDB快照(snapshot)非常便于進行數(shù)據(jù)庫備份某宪, 并且 RDB 恢復(fù)數(shù)據(jù)集的速度也要比AOF恢復(fù)的速度要快,除此之外锐朴, 使用RDB還可以避免之前提到的AOF程序的bug兴喂。

50、修改配置不重啟Redis會實時生效嗎焚志?

針對運行實例衣迷,有許多配置選項可以通過 CONFIG SET 命令進行修改,而無需執(zhí)行任何形式的重啟酱酬。 從 Redis 2.2 開始壶谒,可以從 AOF 切換到 RDB 的快照持久性或其他方式而不需要重啟 Redis。檢索 ‘CONFIG GET *’ 命令獲取更多信息膳沽。但偶爾重新啟動是必須的汗菜,如為升級 Redis 程序到新的版本,或者當你需要修改某些目前 CONFIG 命令還不支持的配置參數(shù)的時候挑社。

更多面試題以及答案我以文檔的形式保存陨界,面試不懂?趕緊來領(lǐng)取面試資料多刷題吧痛阻!

關(guān)注+轉(zhuǎn)發(fā)? 然后私信“面試”即可打包帶走所有面試資料菌瘪。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市阱当,隨后出現(xiàn)的幾起案子麻车,更是在濱河造成了極大的恐慌缀皱,老刑警劉巖斗这,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件动猬,死亡現(xiàn)場離奇詭異,居然都是意外死亡表箭,警方通過查閱死者的電腦和手機赁咙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來免钻,“玉大人彼水,你說我怎么就攤上這事〖颍” “怎么了凤覆?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長拆魏。 經(jīng)常有香客問我盯桦,道長,這世上最難降的妖魔是什么渤刃? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任拥峦,我火速辦了婚禮,結(jié)果婚禮上卖子,老公的妹妹穿的比我還像新娘略号。我一直安慰自己,他們只是感情好洋闽,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布玄柠。 她就那樣靜靜地躺著,像睡著了一般诫舅。 火紅的嫁衣襯著肌膚如雪羽利。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天骚勘,我揣著相機與錄音铐伴,去河邊找鬼。 笑死俏讹,一個胖子當著我的面吹牛当宴,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播泽疆,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼户矢,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了殉疼?” 一聲冷哼從身側(cè)響起梯浪,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤捌年,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后挂洛,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體礼预,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年虏劲,在試婚紗的時候發(fā)現(xiàn)自己被綠了托酸。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡柒巫,死狀恐怖励堡,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情堡掏,我是刑警寧澤应结,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站泉唁,受9級特大地震影響鹅龄,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜游两,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一砾层、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧贱案,春花似錦肛炮、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至瘩燥,卻和暖如春秕重,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背厉膀。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工溶耘, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人服鹅。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓凳兵,卻偏偏與公主長得像,于是被迫代替她去往敵國和親企软。 傳聞我的和親對象是個殘疾皇子庐扫,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容

  • Redis是單進程單線程的形庭,Redis利用隊列技術(shù)將并發(fā)訪問變?yōu)榇性L問铅辞,消除了傳統(tǒng)數(shù)據(jù)庫串行控制的開銷。 Red...
    編輯小猿閱讀 566評論 0 1
  • 基于內(nèi)存的NoSQL數(shù)據(jù)庫萨醒。提供五種數(shù)據(jù)結(jié)構(gòu)的存儲斟珊。字符串、列表验靡、集合倍宾、有序集合、散列表胜嗓。Redis 支持很多特性...
    韓絕交閱讀 680評論 0 1
  • Redis是單進程單線程的,Redis利用隊列技術(shù)將并發(fā)訪問變?yōu)榇性L問钩乍,消除了傳統(tǒng)數(shù)據(jù)庫串行控制的開銷辞州。 Red...
    編輯小猿閱讀 312評論 0 0
  • Redis支持的數(shù)據(jù)類型? String字符串: 格式: set key value string類型是二進制安全...
    天的安排閱讀 639評論 0 0
  • Redis雜談 Redis是近年來發(fā)展迅速的內(nèi)存數(shù)據(jù)庫寥粹,網(wǎng)上也已經(jīng)有多Redis的文章变过。但不管是英文還是中文,多數(shù)...
    迷失于重逢閱讀 1,533評論 0 14