欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

Redis的高頻面試題有哪些

本篇內(nèi)容主要講解“redis的高頻面試題有哪些”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“Redis的高頻面試題有哪些”吧!

成都創(chuàng)新互聯(lián)堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站設(shè)計制作、做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的黃州網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

1、說說 Redis 都有哪些應(yīng)用場景?

  • 緩存:這應(yīng)該是 Redis 主要的功能了,也是大型網(wǎng)站必備機(jī)制,合理地使用緩存不僅可以加 快數(shù)據(jù)的訪問速度,而且能夠有效地降低后端數(shù)據(jù)源的壓力。

  • 共享Session:對于一些依賴 session 功能的服務(wù)來說,如果需要從單機(jī)變成集群的話,可以選擇 redis 來統(tǒng)一管理 session。

  • 消息隊列系統(tǒng):消息隊列系統(tǒng)可以說是一個大型網(wǎng)站的必備基礎(chǔ)組件,因?yàn)槠渚哂袠I(yè)務(wù) 解耦、非實(shí)時業(yè)務(wù)削峰等特性。Redis提供了發(fā)布訂閱功能和阻塞隊列的功  能,雖然和專業(yè)的消息隊列比還不夠足夠強(qiáng)大,但是對于一般的消息隊列功 能基本可以滿足。比如在分布式爬蟲系統(tǒng)中,使用 redis 來統(tǒng)一管理 url隊列。

  • 分布式鎖:在分布式服務(wù)中。可以利用Redis的setnx功能來編寫分布式的鎖,雖然這個可能不是太常用。

當(dāng)然還有諸如排行榜、點(diǎn)贊功能都可以使用 Redis 來實(shí)現(xiàn),但是 Redis 也不是什么都可以做,比如數(shù)據(jù)量特別大時,不適合 Redis,我們知道  Redis 是基于內(nèi)存的,雖然內(nèi)存很便宜,但是如果你每天的數(shù)據(jù)量特別大,比如幾億條的用戶行為日志數(shù)據(jù),用 Redis 來存儲的話,成本相當(dāng)?shù)母摺?/p>

2、單線程的 Redis 為什么這么快?

Redis 有多快?官方給出的答案是讀寫速度 10萬/秒,如果說這是在單線程情況下跑出來的成績,你會不會驚訝?為什么單線程的 Redis  速度這么快?原因有以下幾點(diǎn):

  • 純內(nèi)存操作:Redis 是完全基于內(nèi)存的,所以讀寫效率非常的高,當(dāng)然 Redis 存在持久化操作,在持久化操作是都是 fork 子進(jìn)程和利用 Linux  系統(tǒng)的頁緩存技術(shù)來完成,并不會影響 Redis 的性能。

  • 單線程操作:單線程并不是壞事,單線程可以避免了頻繁的上下文切換,頻繁的上下文切換也會影響性能的。

  • 合理高效的數(shù)據(jù)結(jié)構(gòu)

  • 采用了非阻塞 I/O 多路復(fù)用機(jī)制:多路I/O復(fù)用模型是利用 select、poll、epoll 可以同時監(jiān)察多個流的 I/O  事件的能力,在空閑的時候,會把當(dāng)前線程阻塞掉,當(dāng)有一個或多個流有 I/O 事件時,就從阻塞態(tài)中喚醒,于是程序就會輪詢一遍所有的流(epoll  是只輪詢那些真正發(fā)出了事件的流),并且只依次順序的處理就緒的流,這種做法就避免了大量的無用操作。

3、說說 Redis 的數(shù)據(jù)結(jié)構(gòu)及使用場景

Redis 提供了 5種數(shù)據(jù)結(jié)構(gòu),每一種數(shù)據(jù)結(jié)構(gòu)有各種的使用場景。

1、String 字符串

字符串類型是 Redis 最基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu),首先鍵都是字符串類型,而且 其他幾種數(shù)據(jù)結(jié)構(gòu)都是在字符串類型基礎(chǔ)上構(gòu)建的,我們常使用的 set key  value 命令就是字符串。常用在緩存、計數(shù)、共享Session、限速等。

2、Hash 哈希

在Redis中,哈希類型是指鍵值本身又是一個鍵值對  結(jié)構(gòu),形如value={{field1,value1},...{fieldN,valueN}},添加命令:hset key field  value。哈希可以用來存放用戶信息,比如實(shí)現(xiàn)購物車

3、List 列表

列表(list)類型是用來存儲多個有序的字符串。可以做簡單的消息隊列的功能。另外,可以利用 lrange 命令,做基于  Redis的分頁功能,性能極佳,用戶體驗(yàn)好。

4、Set 集合

集合(set)類型也是用來保存多個的字符串元素,但和列表類型不一 樣的是,集合中不允許有重復(fù)元素,并且集合中的元素是無序的,不能通過  索引下標(biāo)獲取元素。利用 Set 的交集、并集、差集等操作,可以計算共同喜好,全部的喜好,自己獨(dú)有的喜好等功能。

5、Sorted Set 有序集合

Sorted Set 多了一個權(quán)重參數(shù) Score,集合中的元素能夠按 Score 進(jìn)行排列。可以做排行榜應(yīng)用,取 TOP N 操作

4、說一說 Redis 的數(shù)據(jù)過期淘汰策略

先給大家一個結(jié)論,Redis 中數(shù)據(jù)過期策略采用定期刪除+惰性刪除策略。

1、定期刪除、惰性刪除策略是什么?

  • 定期刪除策略:Redis 啟用一個定時器定時監(jiān)視所有的 key,判斷key是否過期,過期的話就刪除。這種策略可以保證過期的 key  最終都會被刪除,但是也存在嚴(yán)重的缺點(diǎn):每次都遍歷內(nèi)存中所有的數(shù)據(jù),非常消耗 CPU 資源,并且當(dāng) key 已過期,但是定時器還處于未喚起狀態(tài),這段時間內(nèi) key  仍然可以用。

  • 惰性刪除策略:在獲取 key 時,先判斷 key 是否過期,如果過期則刪除。這種方式存在一個缺點(diǎn):如果這個 key  一直未被使用,那么它一直在內(nèi)存中,其實(shí)它已經(jīng)過期了,會浪費(fèi)大量的空間。

2、定期刪除+惰性刪除策略是如何工作的?

這兩種策略天然的互補(bǔ),結(jié)合起來之后,定時刪除策略就發(fā)生了一些改變,不在是每次掃描全部的 key 了,而是隨機(jī)抽取一部分 key 進(jìn)行檢查,這樣就降低了對  CPU  資源的損耗,惰性刪除策略互補(bǔ)了為檢查到的key,基本上滿足了所有要求。但是有時候就是那么的巧,既沒有被定時器抽取到,又沒有被使用,這些數(shù)據(jù)又如何從內(nèi)存中消失?沒關(guān)系,還有內(nèi)存淘汰機(jī)制,當(dāng)內(nèi)存不夠用時,內(nèi)存淘汰機(jī)制就會上場。Redis  內(nèi)存淘汰機(jī)制有以下幾種策略:

  • noeviction:當(dāng)內(nèi)存不足以容納新寫入數(shù)據(jù)時,新寫入操作會報錯。(Redis 默認(rèn)策略)

  • allkeys-lru:當(dāng)內(nèi)存不足以容納新寫入數(shù)據(jù)時,在鍵空間中,移除最近最少使用的 Key。(推薦使用)

  • allkeys-random:當(dāng)內(nèi)存不足以容納新寫入數(shù)據(jù)時,在鍵空間中,隨機(jī)移除某個 Key。

  • volatile-lru:當(dāng)內(nèi)存不足以容納新寫入數(shù)據(jù)時,在設(shè)置了過期時間的鍵空間中,移除最近最少使用的 Key。這種情況一般是把 Redis  既當(dāng)緩存,又做持久化存儲的時候才用。

  • volatile-random:當(dāng)內(nèi)存不足以容納新寫入數(shù)據(jù)時,在設(shè)置了過期時間的鍵空間中,隨機(jī)移除某個 Key。

  • volatile-ttl:當(dāng)內(nèi)存不足以容納新寫入數(shù)據(jù)時,在設(shè)置了過期時間的鍵空間中,有更早過期時間的 Key 優(yōu)先移除。

修改內(nèi)存淘汰機(jī)制只需要在 redis.conf 配置文件中配置 maxmemory-policy 參數(shù)即可。

5、如何解決 Redis 緩存穿透和緩存雪崩問題

緩存雪崩: 由于緩存層承載著大量請求,有效地 保護(hù)了存儲層,但是如果緩存層由于某些原因不能提供服務(wù),比如 Redis 節(jié)點(diǎn)掛掉了,熱點(diǎn) key  全部失效了,在這些情況下,所有的請求都會直接請求到數(shù)據(jù)庫,可能會造成數(shù)據(jù)庫宕機(jī)的情況。

預(yù)防和解決緩存雪崩問題,可以從以下三個方面進(jìn)行著手:

1、使用 Redis 高可用架構(gòu):使用 Redis 集群來保證 Redis 服務(wù)不會掛掉

2、緩存時間不一致: 給緩存的失效時間,加上一個隨機(jī)值,避免集體失效

3、限流降級策略:有一定的備案,比如個性推薦服務(wù)不可用了,換成熱點(diǎn)數(shù)據(jù)推薦服務(wù)

緩存穿透: 緩存穿透是指查詢一個根本不存在的數(shù)據(jù),這樣的數(shù)據(jù)肯定不在緩存中,這會導(dǎo)致請求全部落到數(shù)據(jù)庫上,有可能出現(xiàn)數(shù)據(jù)庫宕機(jī)的情況。

預(yù)防和解決緩存穿透問題,可以考慮以下兩種方法:

1、緩存空對象: 將空值緩存起來,但是這樣就有一個問題,大量無效的空值將占用空間,非常浪費(fèi)。

2、布隆過濾器攔截: 將所有可能的查詢key  先映射到布隆過濾器中,查詢時先判斷key是否存在布隆過濾器中,存在才繼續(xù)向下執(zhí)行,如果不存在,則直接返回。布隆過濾器有一定的誤判,所以需要你的業(yè)務(wù)允許一定的容錯性。

到此,相信大家對“Redis的高頻面試題有哪些”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

文章標(biāo)題:Redis的高頻面試題有哪些
文章來源:http://www.chinadenli.net/article6/gpeiig.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站企業(yè)建站網(wǎng)站改版App開發(fā)營銷型網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化