【每日3分鐘技術干貨|面試題+答案|Redis篇(一-創(chuàng)新互聯(lián)

1. Redis 是什么?**都有哪些使用場景?**

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

我們先來理解經(jīng)典的CAP理論

一致性:是指從數(shù)據(jù)層面來看的一致性。

可用性:是指從系統(tǒng)層面的可用性。

容錯性:是指從網(wǎng)絡層面的的容錯性。

數(shù)據(jù)庫逐漸從關系數(shù)據(jù)庫向不同領域不同層次分化。隨著讀多寫少場景的出現(xiàn),導致需要讀取數(shù)據(jù)的時間變慢,為了提升性能,出現(xiàn)了數(shù)據(jù)庫緩存技術,對數(shù)據(jù)庫的讀取進行分離。web2.0時代,網(wǎng)民的生產(chǎn)力大增,存儲總量也在增加,目前還是讀多寫少模式,原有的緩存技術顯然不能滿足寫的壓力,所以,出現(xiàn)了分庫分表,實現(xiàn)讀寫分離。其中比較常用的一種緩存技術是用Redis做緩存。

Redis是什么?

Redis是一個基于內(nèi)存且支持持久化的key-value的NoSQL數(shù)據(jù)庫,其中每個key和value都是使用對象表示的,具有以以下特征:多樣數(shù)據(jù)類型、持久化、主從同步。

和Memcached類似,它支持存儲的value類型相對更多,包括string(字符串)、list(鏈表)、set(集合)和zset(有序集合)。這些數(shù)據(jù)類型都支持push/pop、add/remove及取交集并集和差集及更豐富的操作,而且這些操作都是原子性的。

在此基礎上,redis支持各種不同方式的排序。與memcached一樣,為了保證效率,數(shù)據(jù)都是緩存在內(nèi)存中。區(qū)別的是redis會周期性的使用RDB快照的方式,把更新的數(shù)據(jù)寫入磁盤或者使用類似MySQL的AOF日志方式把修改操作寫入追加的記錄文件,并且在此基礎上實現(xiàn)了master-slave(主從)同步。Redis支持將數(shù)據(jù)同步到多臺從數(shù)據(jù)庫上,這種特性對提高讀取性能非常有益。

Redis3.0版本允許單點故障,它沒有中心節(jié)點,各個節(jié)點地位一樣,擴展性很好,節(jié)點間的采用二進制通信,節(jié)點與客戶端采用ascII協(xié)議通信。

綜上所述,Redis可用于緩存、數(shù)據(jù)庫、消息中間件。

Redis 使用場景:

  • 記錄帖子點贊數(shù)、點擊數(shù)、評論數(shù);

  • 緩存近期熱帖;

  • 緩存文章詳情信息;

  • 記錄用戶會話信息。

2. Redis 有哪些功能?

  • 數(shù)據(jù)緩存功能

  • 分布式鎖的功能

  • 支持數(shù)據(jù)持久化

  • 支持事務

  • 支持消息隊列

3. Redis 和 memcache 有什么區(qū)別?

  • 存儲方式不同:memcache 把數(shù)據(jù)全部存在內(nèi)存之中,斷電后會掛掉,數(shù)據(jù)不能超過內(nèi)存大?。籖edis 有部份存在硬盤上,這樣能保證數(shù)據(jù)的持久性。

  • 數(shù)據(jù)支持類型:memcache 對數(shù)據(jù)類型支持相對簡單;Redis 有復雜的數(shù)據(jù)類型。

  • 使用底層模型不同:它們之間底層實現(xiàn)方式,以及與客戶端之間通信的應用協(xié)議不一樣,Redis 自己構建了 vm 機制,因為一般的系統(tǒng)調(diào)用系統(tǒng)函數(shù)的話,會浪費一定的時間去移動和請求。

  • value 值大小不同:Redis 大可以達到 1gb;memcache 只有 1mb。

4. Redis 為什么是單線程的?

因為 cpu 不是 Redis 的瓶頸,Redis 的瓶頸最有可能是機器內(nèi)存或者網(wǎng)絡帶寬。既然單線程容易實現(xiàn),而且 cpu 又不會成為瓶頸,那就順理成章地采用單線程的方案了。

關于 Redis 的性能,官方網(wǎng)站也有,普通筆記本輕松處理每秒幾十萬的請求。

而且單線程并不代表就慢 nginx 和 nodejs 也都是高性能單線程的代表。

5. 什么是緩存穿透?**怎么解決?**

緩存穿透:指查詢一個一定不存在的數(shù)據(jù),由于緩存是不命中時需要從數(shù)據(jù)庫查詢,查不到數(shù)據(jù)則不寫入緩存,這將導致這個不存在的數(shù)據(jù)每次請求都要到數(shù)據(jù)庫去查詢,造成緩存穿透。

解決方案:最簡單粗暴的方法如果一個查詢返回的數(shù)據(jù)為空(不管是數(shù)據(jù)不存在,還是系統(tǒng)故障),我們就把這個空結果進行緩存,但它的過期時間會很短,最長不超過五分鐘。

6. Redis 支持的數(shù)據(jù)類型有哪些?

Redis 支持的數(shù)據(jù)類型:string(字符串)、list(列表)、hash(字典)、set(集合)、zset(有序集合)。

7. Redis 支持的 Java 客戶端都有哪些?

支持的 Java 客戶端有 Redisson、jedis、lettuce 等。

8. jedis 和 Redisson 有哪些區(qū)別?

  • jedis:提供了比較全面的 Redis 命令的支持。

  • Redisson:實現(xiàn)了分布式和可擴展的 Java 數(shù)據(jù)結構,與 jedis 相比 Redisson 的功能相對簡單,不支持排序、事務、管道、分區(qū)等 Redis 特性。

9. 怎么保證緩存和數(shù)據(jù)庫數(shù)據(jù)的一致性?

  • 合理設置緩存的過期時間。

  • 新增、更改、刪除數(shù)據(jù)庫操作時同步更新 Redis,可以使用事物機制來保證數(shù)據(jù)的一致性。

10. Redis 持久化有幾種方式?

Redis 的持久化有兩種方式,或者說有兩種策略:

  • RDB(Redis Database):指定的時間間隔能對你的數(shù)據(jù)進行快照存儲。

  • AOF(Append Only File):每一個收到的寫命令都通過write函數(shù)追加到文件中。

11. Redis 怎么實現(xiàn)分布式鎖?

Redis 分布式鎖其實就是在系統(tǒng)里面占一個“坑”,其他程序也要占“坑”的時候,占用成功了就可以繼續(xù)執(zhí)行,失敗了就只能放棄或稍后重試。

占坑一般使用 setnx(set if not exists)指令,只允許被一個程序占有,使用完調(diào)用 del 釋放鎖。

12. Redis 分布式鎖有什么缺陷?

Redis 分布式鎖不能解決超時的問題,分布式鎖有一個超時時間,程序的執(zhí)行如果超出了鎖的超時時間就會出現(xiàn)問題。

13. Redis 如何做內(nèi)存優(yōu)化?

盡量使用 Redis 的散列表,把相關的信息放到散列表里面存儲,而不是把每個字段單獨存儲,這樣可以有效的減少內(nèi)存使用。比如將 Web 系統(tǒng)的用戶對象,應該放到散列表里面再整體存儲到 Redis,而不是把用戶的姓名、年齡、密碼、郵箱等字段分別設置 key 進行存儲。

14. Redis 淘汰策略有哪些?

  • volatile-lru:從已設置過期時間的數(shù)據(jù)集(server. db[i]. expires)中挑選最近最少使用的數(shù)據(jù)淘汰。

  • volatile-ttl:從已設置過期時間的數(shù)據(jù)集(server. db[i]. expires)中挑選將要過期的數(shù)據(jù)淘汰。

  • volatile-random:從已設置過期時間的數(shù)據(jù)集(server. db[i]. expires)中任意選擇數(shù)據(jù)淘汰。

  • allkeys-lru:從數(shù)據(jù)集(server. db[i]. dict)中挑選最近最少使用的數(shù)據(jù)淘汰。

  • allkeys-random:從數(shù)據(jù)集(server. db[i]. dict)中任意選擇數(shù)據(jù)淘汰。

  • no-enviction(驅(qū)逐):禁止驅(qū)逐數(shù)據(jù)。

15. Redis 常見的性能問題有哪些?**該如何解決?**

  • 主服務器寫內(nèi)存快照,會阻塞主線程的工作,當快照比較大時對性能影響是非常大的,會間斷性暫停服務,所以主服務器最好不要寫內(nèi)存快照。

  • Redis 主從復制的性能問題,為了主從復制的速度和連接的穩(wěn)定性,主從庫最好在同一個局域網(wǎng)內(nèi)。

結語

就以這段話自勉、共勉吧。越努力、越幸運,如果你不是官二代、富二代、紅二代,那么請記?。呵趭^才是改變你命運的唯一捷徑。

歡迎在留言區(qū)留下你的觀點,一起討論提高。如果今天的文章讓你有新的啟發(fā),學習能力的提升上有新的認識,歡迎轉(zhuǎn)發(fā)分享給更多人。

歡迎各位讀者加入程序員**知識碼頭**技術群,在公眾號后臺回復“加群”即可。

猜你還想看

1.面試總問的jvm調(diào)優(yōu)到底是要干什么?

2.程序員應該有什么樣的職業(yè)規(guī)劃?值得思考一下!

3.每日3分鐘技術干貨 | 面試題+答案 | jvm篇(一)

4.每日3分鐘技術干貨 | 面試題+答案 | jvm篇(二)

關注「程序員知識碼頭」,收看更多精彩內(nèi)容

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

本文題目:【每日3分鐘技術干貨|面試題+答案|Redis篇(一-創(chuàng)新互聯(lián)
鏈接分享:http://muchs.cn/article44/ddpihe.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供手機網(wǎng)站建設微信小程序、關鍵詞優(yōu)化、域名注冊電子商務、網(wǎng)站策劃

廣告

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

成都網(wǎng)頁設計公司