Redis面試須知

1膘魄,Redis支持的數(shù)據(jù)類型?

String(字符串類型)

String數(shù)據(jù)結(jié)構(gòu)是簡(jiǎn)單的key-value類型创葡,value其實(shí)不僅可以是String,也可以是數(shù)字成黄。 常規(guī)key-value緩存應(yīng)用; 常規(guī)計(jì)數(shù):微博數(shù),粉絲數(shù)等荸百。

常用命令: 
set,get,incr,decr,mget 等:
set key value 設(shè)置值
get key 獲取值
incr key 加一
decr key 減一

hash(哈希)

Redis hash是一個(gè)string類型的field和value的映射表,hash特別適合用于存儲(chǔ)對(duì)象蓝翰,后續(xù)操作的時(shí)候女嘲,你可以直接僅僅修改這個(gè)對(duì)象中的某個(gè)字段的值。

常用命令: 
set,get,decr,incr,mget 等:
hset key field value 設(shè)置值
hget key field 獲取值
hincrby key field num 設(shè)置增數(shù)量

list(列表)

Redis list 的實(shí)現(xiàn)為一個(gè)雙向鏈表爆雹,即可以支持反向查找和遍歷愕鼓,更方便操作,不過(guò)帶來(lái)了部分額外的內(nèi)存開(kāi)銷册倒。
Redis list 的應(yīng)用場(chǎng)景非常多磺送,也是Redis最重要的數(shù)據(jù)結(jié)構(gòu)之一,比如微博的關(guān)注列表崇呵,粉絲列表甲捏,消息列表等功能都可以用Redis的 list 結(jié)構(gòu)來(lái)實(shí)現(xiàn)。
可以通過(guò) lrange 命令芒粹,就是從某個(gè)元素開(kāi)始讀取多少個(gè)元素大溜,可以基于 list 實(shí)現(xiàn)分頁(yè)查詢,這個(gè)很棒的一個(gè)功能钦奋,基于 redis 實(shí)現(xiàn)簡(jiǎn)單的高性能分頁(yè),可以做類似微博那種下拉不斷分頁(yè)的東西(一頁(yè)一頁(yè)的往下走)朦拖,性能高。

常用命令:
lpush,rpush,lpop,rpop,lrange等:
lpush list a b c d (從list左邊添加元素)
rpush list 1 2 3 4 (從list右邊添加元素)
lrange list 0 -1(從0 到 -1 元素查看:也就表示查看所有)
lpop list (從list左邊取捍岳,刪除)睬隶、 rpop list (從list右邊取,刪除)

set(集合)

Redis的Set是string類型的無(wú)序集合银萍。集合是通過(guò)哈希表實(shí)現(xiàn)的恤左,所以添加,刪除滤蝠,查找的復(fù)雜度都是O(1)授嘀。

常用命令: 
sadd,spop,smembers,sunion 等:
sadd set1 a b c d d (向set1中添加元素) 元素不重復(fù)
smembers set1(查詢?cè)兀?srem set1 a(刪除元素)
sorted set(zset,有序集合)

和set相比览闰,sorted set增加了一個(gè)權(quán)重參數(shù)score巷折,使得集合中的元素能夠按score進(jìn)行有序排列。

例:在直播系統(tǒng)中锻拘,實(shí)時(shí)排行信息包含直播間在線用戶列表署拟,各種禮物排行榜,彈幕消息(可以理解為按消息維度的消息排行榜)等信息推穷,適合使用 Redis 中的 Sorted Set 結(jié)構(gòu)進(jìn)行存儲(chǔ)馒铃。

常用命令:
zadd,zrange,zrem,zcard等:
zadd zset1 1 a 2 b 3 c (添加元素 zadd key score member痕惋,這里添加元素a:1分娃殖、元素b:2分、元素c:3分 )
zrange zset1 0 -1 (查看zset1的所有元素述寡,默認(rèn)從小到大)
zrange zset1 0 -1 withscores (查看zset1的所有元素,包括分?jǐn)?shù)score)
zrevrange zset1 0 -1 (查看zset1的所有元素叶洞,從大到小)
zincrby zset1 5 a (對(duì)zset1的a元素增加5分)

2禀崖,什么是Redis持久化?Redis有哪幾種持久化方式艺晴??jī)?yōu)缺點(diǎn)是什么

持久化就是把內(nèi)存的數(shù)據(jù)寫到磁盤中去掸屡,防止服務(wù)宕機(jī)了內(nèi)存數(shù)據(jù)丟失。
(Redis 數(shù)據(jù)都放在內(nèi)存中狈究。如果機(jī)器掛掉盏求,內(nèi)存的數(shù)據(jù)就不存在。所以需要做持久化磅废,將內(nèi)存中的數(shù)據(jù)保存在磁盤荆烈,下一次啟動(dòng)的時(shí)候就可以恢復(fù)數(shù)據(jù)到內(nèi)存中。)
Redis 提供了兩種持久化方式:RDB(默認(rèn)) 和AOF 宫峦。

RDB (快照):

Redis可以通過(guò)創(chuàng)建快照來(lái) 獲得存儲(chǔ)在內(nèi)存里面的數(shù)據(jù)在某個(gè)時(shí)間點(diǎn)上的副本倦始。Redis創(chuàng)建快照之后,可以對(duì)快照進(jìn)行備份鞋邑,可以將快照復(fù)制到其他服務(wù)器從而創(chuàng)建具有相同數(shù)據(jù)的服務(wù)器副本(Redis主從結(jié)構(gòu),主要用來(lái)提高Redis性能)逾一,還可以將快照留在原地以便重啟服務(wù)器的時(shí)候使用遵堵。
快照持久化是Redis默認(rèn)采用的持久化方式,在redis.conf配置文件中默認(rèn)有此下配置:

save 900 1 #在900秒(15分鐘)之后陌宿,如果至少有1個(gè)key發(fā)生變化壳坪,Redis就會(huì)自動(dòng)觸發(fā)BGSAVE命令創(chuàng)建快照。
save 300 10 #在300秒(5分鐘)之后爽蝴,如果至少有10個(gè)key發(fā)生變化,Redis就會(huì)自動(dòng)觸發(fā)BGSAVE命令創(chuàng)建快照蝎亚。
save 60 10000 #在60秒(1分鐘)之后,如果至少有10000個(gè)key發(fā)生變化躺彬,Redis就會(huì)自動(dòng)觸發(fā)BGSAVE命令創(chuàng)建快照缤底。

AOF(只追加文件):

與快照持久化相比,AOF持久化的實(shí)時(shí)性更好江解,因此已成為主流的持久化方案徙歼。默認(rèn)情況下Redis沒(méi)有開(kāi)啟AOF(append only file)方式的持久化,可以通過(guò)appendonly參數(shù)開(kāi)啟:appendonly yes

開(kāi)啟AOF持久化后每執(zhí)行一條會(huì)更改Redis中的數(shù)據(jù)的命令桨螺,Redis就會(huì)將該命令寫入硬盤中的AOF文件酿秸。AOF文件的保存位置和RDB文件的位置相同,都是通過(guò)dir參數(shù)設(shè)置的肝箱,默認(rèn)的文件名是appendonly.aof。

在Redis的配置文件中存在三種不同的 AOF 持久化方式呐赡,它們分別是:

appendfsync always #每次有數(shù)據(jù)修改發(fā)生時(shí)都會(huì)寫入AOF文件,這樣會(huì)嚴(yán)重降低Redis的速度
appendfsync everysec #每秒鐘同步一次骏融,顯示地將多個(gè)寫命令同步到硬盤
appendfsync no #讓操作系統(tǒng)決定何時(shí)進(jìn)行同步

為了兼顧數(shù)據(jù)和寫入性能,用戶可以考慮 appendfsync everysec選項(xiàng) 怀泊,讓Redis每秒同步一次AOF文件误趴,Redis性能幾乎沒(méi)受到任何影響。而且這樣即使出現(xiàn)系統(tǒng)崩潰,用戶最多只會(huì)丟失一秒之內(nèi)產(chǎn)生的數(shù)據(jù)纤怒。當(dāng)硬盤忙于執(zhí)行寫入操作的時(shí)候天通,Redis還會(huì)優(yōu)雅的放慢自己的速度以便適應(yīng)硬盤的最大寫入速度。

RDB (快照):快照形式 烘豹,定期將當(dāng)前時(shí)刻的數(shù)據(jù)保存磁盤中诺祸。會(huì)產(chǎn)生一個(gè)dump.rdb文件

特點(diǎn):性能較好,數(shù)據(jù)備份憔鬼。但可能會(huì)存在數(shù)據(jù)丟失胃夏。

AOF(只追加文件) :append only file (所有對(duì)redis的操作命令記錄在aof文件中),恢復(fù)數(shù)據(jù)照雁,重新執(zhí)行一遍即可答恶。

特點(diǎn):每秒保存萍诱,數(shù)據(jù)比較完整卸勺。但耗費(fèi)性能。

【注】如果兩個(gè)都配了優(yōu)先加載AOF碍庵。(同時(shí)開(kāi)啟兩個(gè)持久化方案悟狱,則按照 AOF的持久化放案恢復(fù)數(shù)據(jù)。)

3苹享,Redis 有哪些架構(gòu)模式浴麻?講講各自的特點(diǎn)?

主從模式(redis2.8版本之前的模式)宫纬、哨兵sentinel模式(redis2.8及之后的模式)膏萧、redis cluster模式(redis3.0版本之后)

4,什么是緩存穿透蝌蹂?如何避免曹锨?什么是緩存雪崩?何如避免硼身?

4.1覆享、緩存穿透

一般的緩存系統(tǒng),都是按照key去緩存查詢丑罪,如果不存在對(duì)應(yīng)的value,就應(yīng)該去后端系統(tǒng)查找(比如DB)跪另。一些惡意的請(qǐng)求會(huì)故意查詢不存在的key,請(qǐng)求量很大煤搜,就會(huì)對(duì)后端系統(tǒng)造成很大的壓力。這就叫做緩存穿透嘲驾。

如何避免迹卢?

1:對(duì)查詢結(jié)果為空的情況也進(jìn)行緩存,緩存時(shí)間設(shè)置短一點(diǎn)誊垢,或者該key對(duì)應(yīng)的數(shù)據(jù)insert了之后清理緩存症见。

2:對(duì)一定不存在的key進(jìn)行過(guò)濾〗煞龋可以把所有的可能存在的key放到一個(gè)大的Bitmap中瓷们,查詢時(shí)通過(guò)該bitmap過(guò)濾

3:也可以使用流行的bloom filter布隆過(guò)濾器

4.2谬晕、緩存雪崩

當(dāng)緩存服務(wù)器重啟或者大量緩存集中在某一個(gè)時(shí)間段失效携取,這樣在失效的時(shí)候,會(huì)給后端系統(tǒng)帶來(lái)很大壓力不撑。導(dǎo)致系統(tǒng)崩潰晤斩。

如何避免?

1:在緩存失效后实愚,通過(guò)加鎖或者隊(duì)列來(lái)控制讀數(shù)據(jù)庫(kù)寫緩存的線程數(shù)量。比如對(duì)某個(gè)key只允許一個(gè)線程查詢數(shù)據(jù)和寫緩存击喂,其他線程等待碰辅。

2:做二級(jí)緩存,A1為原始緩存凌彬,A2為拷貝緩存榕吼,A1失效時(shí),可以訪問(wèn)A2原探,A1緩存失效時(shí)間設(shè)置為短期顽素,A2設(shè)置為長(zhǎng)期

3:不同的key,設(shè)置不同的過(guò)期時(shí)間型型,讓緩存失效的時(shí)間點(diǎn)盡量均勻全蝶。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末抑淫,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子砌烁,更是在濱河造成了極大的恐慌催式,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,110評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件管呵,死亡現(xiàn)場(chǎng)離奇詭異撇寞,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)牌废,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門啤握,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)排抬,“玉大人,你說(shuō)我怎么就攤上這事番甩〗旄椋” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 165,474評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵宴胧,是天一觀的道長(zhǎng)恕齐。 經(jīng)常有香客問(wèn)我瞬逊,道長(zhǎng),這世上最難降的妖魔是什么确镊? 我笑而不...
    開(kāi)封第一講書人閱讀 58,881評(píng)論 1 295
  • 正文 為了忘掉前任骚腥,我火速辦了婚禮瓶逃,結(jié)果婚禮上厢绝,老公的妹妹穿的比我還像新娘。我一直安慰自己昔汉,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,902評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布口予。 她就那樣靜靜地躺著涕侈,像睡著了一般。 火紅的嫁衣襯著肌膚如雪木张。 梳的紋絲不亂的頭發(fā)上端三,一...
    開(kāi)封第一講書人閱讀 51,698評(píng)論 1 305
  • 那天舷礼,我揣著相機(jī)與錄音,去河邊找鬼郊闯。 笑死妻献,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的虚婿。 我是一名探鬼主播旋奢,決...
    沈念sama閱讀 40,418評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼然痊!你這毒婦竟也來(lái)了至朗?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,332評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤剧浸,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后唆香,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體嫌变,經(jīng)...
    沈念sama閱讀 45,796評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,968評(píng)論 3 337
  • 正文 我和宋清朗相戀三年躬它,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了腾啥。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,110評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡冯吓,死狀恐怖倘待,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情组贺,我是刑警寧澤凸舵,帶...
    沈念sama閱讀 35,792評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站失尖,受9級(jí)特大地震影響啊奄,放射性物質(zhì)發(fā)生泄漏渐苏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,455評(píng)論 3 331
  • 文/蒙蒙 一菇夸、第九天 我趴在偏房一處隱蔽的房頂上張望琼富。 院中可真熱鬧,春花似錦峻仇、人聲如沸公黑。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,003評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)凡蚜。三九已至,卻和暖如春吭从,著一層夾襖步出監(jiān)牢的瞬間朝蜘,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,130評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工涩金, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留谱醇,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,348評(píng)論 3 373
  • 正文 我出身青樓步做,卻偏偏與公主長(zhǎng)得像副渴,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子全度,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,047評(píng)論 2 355

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

  • 一煮剧、Redis高可用概述 在介紹Redis高可用之前,先說(shuō)明一下在Redis的語(yǔ)境中高可用的含義将鸵。 我們知道勉盅,在w...
    空語(yǔ)閱讀 1,597評(píng)論 0 2
  • 轉(zhuǎn)自:https://www.toutiao.com/a6708324379190624782/ 使用 Redis...
    大魚燉海棠閱讀 440評(píng)論 0 1
  • 本文檔翻譯自http://redis.io/topics/persistence。 這篇文章提供了 Redis 持...
    daos閱讀 694評(píng)論 0 10
  • 因前兩天服務(wù)器掛掉了顶掉,導(dǎo)致項(xiàng)目使用的redis數(shù)據(jù)庫(kù)異常草娜,丟失了部分?jǐn)?shù)據(jù),為了能夠更好的使用Redis痒筒,結(jié)合網(wǎng)上的...
    呦_小宋啊閱讀 2,265評(píng)論 2 9
  • 企業(yè)級(jí)redis集群架構(gòu)的特點(diǎn) 海量數(shù)據(jù) 高并發(fā) 高可用 要達(dá)到高可用宰闰,持久化是不可減少的,持久化主要是做災(zāi)難恢復(fù)...
    lucode閱讀 2,206評(píng)論 0 7