- N +

redis淘汰策略面試題 redis面試題

大家好,今天小編來為大家解答以下的問題,關(guān)于redis淘汰策略面試題,redis面試題這個(gè)很多人還不知道,現(xiàn)在讓我們一起來看看吧!

redis淘汰機(jī)制是什么

數(shù)據(jù)淘汰機(jī)制

為了更好的使用內(nèi)存,讓內(nèi)存中存儲的更多是熱點(diǎn)數(shù)據(jù),redis設(shè)計(jì)了內(nèi)存數(shù)據(jù)的淘汰機(jī)制。

淘汰過程

根據(jù)配置文件中設(shè)置的最大內(nèi)存來判斷是否需要開始淘汰數(shù)據(jù)

若某次操作(SET)使內(nèi)存超過峰值,那么redis會根據(jù)設(shè)置的淘汰策略,淘汰一部分?jǐn)?shù)據(jù),回收一些內(nèi)存

淘汰策略

no-enviction

禁止淘汰數(shù)據(jù),對寫的操作返回一個(gè)錯(cuò)誤

allkeys-random

在所有鍵中,隨機(jī)淘汰一個(gè)鍵

volatile-random

在所有鍵中,隨機(jī)淘汰一個(gè)過期的鍵

volatile-ttl

在過期的鍵中,淘汰最早過期的鍵

allkeys-lru

在所有鍵中,淘汰最近最久未使用的鍵

volatile-lru

在過期的鍵中,淘汰最近最久未使用的鍵

Java程序員面試中容易被問哪些問題

1.前臺后臺都做嗎?10分

這一般是我的第一個(gè)問題,超過90%的人會回答:"都做,后臺多一點(diǎn),前臺少一點(diǎn)"

這不是我想要的答案,鬼都知道程序員都要多少涉及一下前臺,后臺更不用說了.

碰到過一個(gè)聰明人,他是這么回答的:前臺js寫的比較熟練,html的框架模板也能搭建的非常整齊美觀,只是特效能力比較差

這個(gè)問題我不想過多討論,加分但不減分

2.事務(wù),什么是事務(wù),為何用事務(wù)10分

大部分面試者,就會舉各種各樣的例子(比如銀行存錢,這個(gè)最多)來說明這個(gè)問題,其實(shí)他們都理解.

但這不是我想要的答案,我期望的答案只有一句:"保證數(shù)據(jù)的一致性和完整性",可惜只有5%左右的人答出來了

這個(gè)問題可以大概了解出面試者的分析能力,以及語言總結(jié)能力,還有他們對這個(gè)玩意的理解程度

答不出減分,舉例子不加分

3.面向切面(AOP),原理是什么10分

這個(gè)就是對技能的掌握程度了

大部分又是舉例子,什么找中介啊之類的,其實(shí)就是來掩蓋他們懂一點(diǎn)實(shí)現(xiàn)邏輯,但是不知道源碼怎么實(shí)現(xiàn)的.

但還真是有學(xué)霸能把代理的原理講出來,非常好.

答不出減分,舉例子不加分,講出原理雙倍分.

4.兩個(gè)項(xiàng)目之間如何通信10分

很基礎(chǔ)的問題,答上來就有分,說明你接觸或者了解過網(wǎng)絡(luò)

5.在上個(gè)問題基礎(chǔ)之上問,碰到亂碼怎么解決,utf-8和gbk可以直接轉(zhuǎn)換么10分

大部分應(yīng)聘者到這里基本就開始胡扯了.有說聲明字符串編碼接收的,有說改項(xiàng)目編碼的,各種各樣五花八門.

更有甚者,utf-8和gbk可以直接轉(zhuǎn)換...

直接說明了他們完全沒有遇到過此類問題,也并不了解編碼.

答不出不減分,胡扯減分,答對雙倍分.

6.簡述一項(xiàng)技術(shù)或設(shè)計(jì)模式的原理20分

這個(gè)幾乎是送分的,但90%的人答不出.我很不解.

答不出減分,答出加分

-----------------------------------------------------------------------------------------------------------------------------

問完以上幾個(gè)問題大概可以判斷出應(yīng)聘者的技術(shù)程度

不管怎么樣

希望多鍛煉自己的口才與技術(shù).

JavaScript和PHP,哪個(gè)更難

PHP好像是一套軍體拳好學(xué),不需要啥基礎(chǔ),只,三月新兵訓(xùn)練,上陣殺敵是沒問題的,雖然沒降龍十八掌,六脈神劍啥的高大上,但是絕對實(shí)用。

JS好比太極拳,三歲小孩子學(xué)三天也能耍三招,但是光能看看,屁殺傷力沒,練久了唔出點(diǎn)道理了,強(qiáng)身健體沒問題,上陣殺敵也沒問題,要是得道成仙了什么降龍十八掌,一陽指,蛤蟆功啥的在他面前都小菜一碟

海量數(shù)據(jù)下如何正確訪問Redis服務(wù)才不會掛掉

要保證Redis不會掛掉,也就是提高Redis的高可用性,可以從這么幾個(gè)方面考慮。

集群式部署方式

Redis單副本:也就是只部署一臺Redis,不需要節(jié)點(diǎn)之間的數(shù)據(jù)同步,架構(gòu)簡單,部署方便;但是單臺機(jī)器畢竟是有風(fēng)險(xiǎn)的,按照題目中【海量數(shù)據(jù)】的場景,是不能達(dá)到高可用要求的。

Redis主從:主從實(shí)例可以部署在不同的物理服務(wù)器上,充分利用多臺服務(wù)器的資源,在主庫發(fā)生故障的時(shí)候,可以進(jìn)行主備切換,從而保證系統(tǒng)的穩(wěn)定運(yùn)行,甚至可以做到讀寫分離,主庫專門用作寫操作,一臺或多臺備庫進(jìn)行讀操作;但是當(dāng)主庫發(fā)生故障的時(shí)候(如果沒有HA方案的話),是需要手動進(jìn)行主備切換的。

RedisSentinel:部署架構(gòu)分為兩部分【Sentinel集群】和【數(shù)據(jù)集群】;Sentinel集群是由多個(gè)Sentinel節(jié)點(diǎn)組成的分布式集群,通常是2N+1臺服務(wù)器,可以實(shí)現(xiàn)故障發(fā)現(xiàn)和轉(zhuǎn)移、客戶端通知等功能;數(shù)據(jù)集群用于存儲數(shù)據(jù);它能夠解決主從模式下的自動切換問題,并且數(shù)據(jù)集群是可以橫向擴(kuò)展的;當(dāng)然這個(gè)架構(gòu)實(shí)現(xiàn)和部署起來,也更為復(fù)雜一些;并且這個(gè)架構(gòu)不能做到讀寫分離。

RedisCluster:Redis3.0集群,是分布式集群解決方案之一,物理架構(gòu)中配置2N個(gè)節(jié)點(diǎn)(主從一一對應(yīng)),主節(jié)點(diǎn)提供讀寫操作,從節(jié)點(diǎn)作為備份;數(shù)據(jù)分布保存在多個(gè)節(jié)點(diǎn)上,是一種無中心的架構(gòu),如果有部分節(jié)點(diǎn)發(fā)生故障,能夠?qū)崿F(xiàn)故障自動轉(zhuǎn)移和切換,用投票機(jī)制完成備庫升級為主庫(下文的Redis分片章節(jié),還會介紹到RedisCluster)。

Redis分片

Redis在3.0之前只支持單實(shí)例,在此之前,在數(shù)據(jù)量比較大的情況,通常有幾種方案可以做到把數(shù)據(jù)分片保存到多臺服務(wù)器上。

客戶端分片:分片邏輯被放到了客戶端上,由客戶端根據(jù)路由規(guī)則,把數(shù)據(jù)保存不同的Redis實(shí)例中,讀取的時(shí)候也是根據(jù)規(guī)則,去對應(yīng)的實(shí)例上讀取數(shù)據(jù);但是當(dāng)Redis實(shí)例數(shù)量發(fā)生變化的時(shí)候(增加實(shí)例或減少實(shí)例),需要手動地調(diào)整分片的規(guī)則程序;并且這種部署方式,也增加了運(yùn)維的成本。

Redis代理組件:在這種架構(gòu)中,客戶端不再直接訪問Redis實(shí)例,而是訪問代理組件,由它管理路由的規(guī)則;客戶端不需要關(guān)心有幾個(gè)Redis實(shí)例,數(shù)據(jù)被路由到哪個(gè)實(shí)例上;但是由于在客戶端和Redis之間增加了一層代理,多多少少也會產(chǎn)生一些性能上的損耗。

RedisCluster:上文中提到的Redis3.0集群,這里對數(shù)據(jù)的存儲和路由方式,再介紹幾句:Redis把所有的Key分成了16384個(gè)slot,每個(gè)Redis實(shí)例負(fù)責(zé)其中一部分slot;每個(gè)Redis都知道每個(gè)slot在哪個(gè)節(jié)點(diǎn)上存儲(實(shí)例節(jié)點(diǎn)定期做數(shù)據(jù)交換);當(dāng)客戶端訪問到一個(gè)Redis實(shí)例的時(shí)候,如果數(shù)據(jù)不在這個(gè)實(shí)例上,那么會通過重定向命令引導(dǎo)客戶端訪問數(shù)據(jù)所在的實(shí)例。

熱點(diǎn)數(shù)據(jù)挑戰(zhàn)單節(jié)點(diǎn)的極限

雖然我們已經(jīng)把數(shù)據(jù)分散保存到多臺Redis實(shí)例上了,但是如果有一個(gè)熱點(diǎn)數(shù)據(jù)被頻繁訪問,超過了單實(shí)例的服務(wù)器極限,那么該如何解決呢?通常的手段就是做讀寫分離,部署多臺只讀節(jié)點(diǎn),對外提供服務(wù)。

我將持續(xù)分享Java開發(fā)、架構(gòu)設(shè)計(jì)、程序員職業(yè)發(fā)展等方面的見解,希望能得到你的關(guān)注。

redis hash可以存儲多少個(gè)key

Redis中的hash類型數(shù)據(jù)結(jié)構(gòu)是一個(gè)鍵值對集合,可以存儲大量的鍵值對。然而,Redis中各種數(shù)據(jù)結(jié)構(gòu)的最大存儲量受到多種因素的限制,如Redis所運(yùn)行的服務(wù)器硬件、Redis內(nèi)存容量和操作系統(tǒng)等。具體來說,hash類型可以存儲多少個(gè)key,主要取決于以下兩個(gè)因素:

1.內(nèi)存容量

Redis的內(nèi)存大小是hash類型存儲鍵值對數(shù)量的最主要限制因素。在Redis中,hash類型可以存儲約4億個(gè)鍵值對。當(dāng)Redis達(dá)到內(nèi)存極限時(shí),會進(jìn)行內(nèi)存淘汰的操作,以釋放一些空間。

2.單個(gè)key的最大大小

除了受到Redis內(nèi)存容量的限制外,hash類型還有一個(gè)單個(gè)key值最大大小的限制。Redis單個(gè)key值的最大大小為512MB,因此在存儲鍵值對的同時(shí)也要注意單個(gè)鍵值對的大小,避免超過最大可存儲大小。

需要注意的是,雖然hash類型的鍵值對最大為4億條,但如果存儲的數(shù)據(jù)非常龐大,可能會對Redis的性能產(chǎn)生較大的影響。因此,針對不同的應(yīng)用場景和需求,需要合理選擇合適的數(shù)據(jù)結(jié)構(gòu),并進(jìn)行有效地設(shè)計(jì)與優(yōu)化。

關(guān)于本次redis淘汰策略面試題和redis面試題的問題分享到這里就結(jié)束了,如果解決了您的問題,我們非常高興。

返回列表
上一篇:
下一篇: