以下是 Redis 常見(jiàn)的八道面試題:
Redis 支持的數(shù)據(jù)結(jié)構(gòu)有哪些?
Redis 是如何實(shí)現(xiàn)持久化的?
Redis 如何實(shí)現(xiàn)分布式鎖?
Redis 如何處理并發(fā)請(qǐng)求?
Redis 的過(guò)期鍵的刪除策略是什么?
Redis 的主從同步原理是什么?
Redis 如何實(shí)現(xiàn)高可用?
Redis 的內(nèi)存淘汰策略有哪些?
這些問(wèn)題涵蓋了 Redis 的基本概念、原理、應(yīng)用和優(yōu)化等方面,是 Redis 面試中經(jīng)常出現(xiàn)的問(wèn)題。
Redis是一個(gè)開(kāi)源的使用ANSI C語(yǔ)言支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型、Key-Value數(shù)據(jù)庫(kù),并提供多種語(yǔ)言的API。redis的默認(rèn)端口號(hào)是6379。
6379在是手機(jī)按鍵上MERZ對(duì)應(yīng)的號(hào)碼,而MERZ取自意大利歌女Alessia Merz的名字。MERZ長(zhǎng)期以來(lái)被Redis作者antirez及其朋友當(dāng)作愚蠢的代名詞。后來(lái)Redis作者在開(kāi)發(fā)Redis時(shí)就選用了這個(gè)端口。
Redis是一個(gè)開(kāi)源的使用ANSIC語(yǔ)言編寫(xiě)、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型、Key-Value數(shù)據(jù)庫(kù),并提供多種語(yǔ)言的API。從2010年3月15日起,Redis的開(kāi)發(fā)工作由VMware主持。從2013年5月開(kāi)始,Redis的開(kāi)發(fā)由Pivotal贊助。
Redis注解:
@RedisHash("persons"):用于指定操作實(shí)體類(lèi)對(duì)象在Redis數(shù)據(jù)庫(kù)中的存儲(chǔ)空間,此處表示針對(duì)Person實(shí)體類(lèi)的數(shù)據(jù)操作都存儲(chǔ)在Redis數(shù)據(jù)庫(kù)中名為persons的存儲(chǔ)空間下。
@Id:用于標(biāo)識(shí)實(shí)體類(lèi)主鍵。在Redis數(shù)據(jù)庫(kù)中會(huì)默認(rèn)生成字符串形式的HashKey表示唯一的實(shí)體對(duì)象id,當(dāng)然也可以在數(shù)據(jù)存儲(chǔ)時(shí)手動(dòng)指定id。
@Indexed:用于標(biāo)識(shí)對(duì)應(yīng)屬性在Redis數(shù)據(jù)庫(kù)中生成二級(jí)索引。使用該注解后會(huì)在數(shù)據(jù)庫(kù)中生成屬性對(duì)應(yīng)的二級(jí)索引,索引名稱(chēng)就是屬性名,可以方便地進(jìn)行數(shù)據(jù)查詢(xún)。
zookeeper和redis有很多不同之處:
(1)功能上:zookeeper是一個(gè)分布式的,強(qiáng)一致性的配置管理和協(xié)調(diào)服務(wù)系統(tǒng),可以在一個(gè)分布式的集群環(huán)境中應(yīng)用;而redis是一個(gè)開(kāi)源的,高性能的,基于內(nèi)存的key-value數(shù)據(jù)庫(kù),它通常用于緩存數(shù)據(jù),提供存儲(chǔ)服務(wù)。
(2)數(shù)據(jù)模型上:zookeeper支持鍵值對(duì)數(shù)據(jù)模型,其存儲(chǔ)的節(jié)點(diǎn)可以是一個(gè)臨時(shí)節(jié)點(diǎn)或永久節(jié)點(diǎn);而redis支持五種數(shù)據(jù)結(jié)構(gòu),包括字符串、哈希、列表、集合和有序集合。
(3)持久性:zookeeper在提供服務(wù)時(shí)可以提供持久性,而redis數(shù)據(jù)不持久,如果宕機(jī)則會(huì)丟失數(shù)據(jù)。內(nèi)存的數(shù)據(jù)可以持久化到磁盤(pán)上,但是需要開(kāi)發(fā)者自己來(lái)實(shí)現(xiàn)。
(4)速度:zookeeper的讀寫(xiě)速度較慢,而redis的讀寫(xiě)速度非???,一般來(lái)說(shuō),在大部分場(chǎng)景下,redis都可以支持實(shí)時(shí)讀寫(xiě)操作
Redis是一款基于內(nèi)存的高性能鍵值存儲(chǔ)系統(tǒng),具有以下主要功能:1. 快速存儲(chǔ)和檢索:Redis將數(shù)據(jù)存儲(chǔ)在內(nèi)存中,因此具有快速的讀寫(xiě)性能。它支持多種數(shù)據(jù)結(jié)構(gòu)和操作,包括字符串、列表、集合、有序集合和哈希表等。2. 緩存:Redis可以用作緩存系統(tǒng),可以將常用的數(shù)據(jù)存儲(chǔ)在內(nèi)存中,以提高訪問(wèn)速度,并減少對(duì)后端存儲(chǔ)系統(tǒng)的壓力。3. 發(fā)布/訂閱:Redis支持發(fā)布/訂閱模式,允許多個(gè)客戶(hù)端訂閱指定的頻道,當(dāng)有新消息發(fā)布到頻道時(shí),訂閱者將立即接收到通知。4. 持久化:Redis支持持久化,可以將數(shù)據(jù)保存到硬盤(pán)上,以保證數(shù)據(jù)在重啟后的持久性。5. 事務(wù)支持:Redis支持事務(wù),可以將多個(gè)操作打包在一個(gè)事務(wù)中,并保證這些操作的原子性。6. 分布式:Redis可以通過(guò)分片和復(fù)制功能實(shí)現(xiàn)數(shù)據(jù)的水平擴(kuò)展和高可用性??梢詫?shù)據(jù)分布在多個(gè)節(jié)點(diǎn)上進(jìn)行處理,并進(jìn)行數(shù)據(jù)備份和故障轉(zhuǎn)移。7. 數(shù)據(jù)過(guò)期:Redis支持為數(shù)據(jù)設(shè)置過(guò)期時(shí)間,在數(shù)據(jù)到期后會(huì)自動(dòng)刪除,可以用于實(shí)現(xiàn)緩存過(guò)期和數(shù)據(jù)自動(dòng)清理等功能??偟膩?lái)說(shuō),Redis是一個(gè)功能強(qiáng)大的鍵值存儲(chǔ)系統(tǒng),可以用于各種應(yīng)用場(chǎng)景,包括緩存、消息隊(duì)列、任務(wù)隊(duì)列、計(jì)數(shù)器和排行榜等。
Redis(Remote Dictionary Server ),即遠(yuǎn)程字典服務(wù),是一個(gè)開(kāi)源的使用ANSI C語(yǔ)言編寫(xiě)、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型、Key-Value數(shù)據(jù)庫(kù),并提供多種語(yǔ)言的API。從2010年3月15日起,Redis的開(kāi)發(fā)工作由VMware主持。從2013年5月開(kāi)始,Redis的開(kāi)發(fā)由Pivotal贊助。
中文名
遠(yuǎn)程字典服務(wù)
外文名
Remote Dictionary Server
簡(jiǎn)稱(chēng)
Redis
分類(lèi)
數(shù)據(jù)庫(kù)
相關(guān)
NoSql 數(shù)據(jù)存儲(chǔ)
Redis 與其他 key - value 緩存產(chǎn)品有以下三個(gè)特點(diǎn):Redis支持?jǐn)?shù)據(jù)的持久化,可以將內(nèi)存中的數(shù)據(jù)保持在磁盤(pán)中,重啟的時(shí)候可以再次加載進(jìn)行使用。Redis不僅僅支持簡(jiǎn)單的key-value類(lèi)型的數(shù)據(jù),同時(shí)還提供list,set,zset,hash等數(shù)據(jù)結(jié)構(gòu)的存儲(chǔ)。Redis支持?jǐn)?shù)據(jù)的備份,即master-slave模式的數(shù)據(jù)備份。Redis 優(yōu)勢(shì)性能極高 ?C Redis能讀的速度是110000次/s,寫(xiě)的速度是81000次/s 。豐富的數(shù)據(jù)類(lèi)型 ?C Redis支持二進(jìn)制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 數(shù)據(jù)類(lèi)型操作。原子 ?C Redis的所有操作都是原子性的,同時(shí)Redis還支持對(duì)幾個(gè)操作全并后的原子性執(zhí)行。豐富的特性 ?C Redis還支持 publish/subscribe, 通知, key 過(guò)期等等特性。
token存儲(chǔ)在redis中,設(shè)置了過(guò)期時(shí)間,過(guò)期就過(guò)期了 ,不需要去刷新token,
token過(guò)期后,客戶(hù)端可以依據(jù)refreshtoken來(lái)獲取新的token。
Redis HashMap原理是把HashMap中的每個(gè)鍵值對(duì)用一個(gè)字符串來(lái)表示。既然每個(gè)鍵值對(duì)都用一個(gè)字符串表示,我們就可以使用Redis的HSET/HGET/HMGET等命令來(lái)控制它們,從而實(shí)現(xiàn)對(duì)hashmap的操作,比如添加/刪除鍵值對(duì)(HSET/HGET);更新值(HDEL/HINCR);查詢(xún)值(HMGET/HMGETALL)等等。