干貨 | 關于Redis 的面試題(Java面試)



       1.Redis是什么?
      Redis本質上是一個Key-Value類型的內存數(shù)據(jù)庫,很像memcached,整個數(shù)據(jù)庫統(tǒng)統(tǒng)加載在內存當中進行操作,定期通過異步操作把數(shù)據(jù)庫數(shù)據(jù)flush到硬盤上進行保存。

      因為是純內存操作,Redis 的性能非常出色,每秒可以處理超過10萬次讀寫操作,是已知性能最快的Key-Value DB。

      Redis的出色之處不僅僅是性能,Redis 最大的魅力是支持保存多種數(shù)據(jù)結構,此外單個value的最大限制是1GB,不像memcached只能保存1MB的數(shù)據(jù),因此Redis可以用來實現(xiàn)很多有用的功能。

      比方說用他的List來做FIFO雙向鏈表,實現(xiàn)一個輕量級的高性能消息隊列服務,用他的Set可以做高性能的tag系統(tǒng)等等。

      2.Redis相比memcached有哪些優(yōu)勢?
      ① memcached所有的值均是簡單的字符串,redis作為 其替代者,支持更為豐富的數(shù)據(jù)類型
      ②redis的速度比memcached快很多
      ③ redis可以持久化其數(shù)據(jù)

      3.Redis有哪幾種數(shù)據(jù)淘汰策略?
      Redis有哪幾種數(shù)據(jù)淘汰策略?有noeviction、allkeys-lru、allkeys-random、volatile-random、volatile-ttl五種淘汰策略,下面我們分別介紹。

      noeviction:返回錯誤當內存限制達到并且客戶端嘗試執(zhí)行會讓更多內存被使用的命令(部分的寫入指令,但DEL和幾個例外)

      allkeys-lru:嘗試回收最少使用的鍵(LRU),使得新添加的數(shù)據(jù)有空間存放。

      volatile-lru:嘗試回收最少使用的鍵(LRU),但僅限于在過期集合的鍵,使得新添加的數(shù)據(jù)有空間存放。

      allkeys-random:回收隨機的鍵使得新添加的數(shù)據(jù)有空間存放。

      volatile-random:回收隨機的鍵使得新添加的數(shù)據(jù)有空間存放,但僅限于在過期集合的鍵。

      volatile-ttl:回收在過期集合的鍵,并且優(yōu)先回收存活時間(TTL)較短的鍵,使得新添加的數(shù)據(jù)有空間存放

      4.Redis所有數(shù)據(jù)放到內存中的原因是什么?
      Redis為了達到最快的讀寫速度將數(shù)據(jù)都讀到內存中,并通過異步的方式將數(shù)據(jù)寫入磁盤。

      所以redis具有快速和數(shù)據(jù)持久化的特征。如果不將數(shù)據(jù)放在內存中,磁盤I/O速度為嚴重影響redis的性能。在內存越來越便宜的今天,redis將會越來越受歡迎。如果設置了最大使用的內存,則數(shù)據(jù)已有記錄數(shù)達到內存限值后不能繼續(xù)插入新值。

      5.Redis適合在哪些場景使用?
      ①會話緩存(Session Cache)
      最常用的一種使用Redis的情景是會話緩存(session cache)。用Redis緩存會話比其他存儲(如Mem cached)的優(yōu)勢在于:Redis提供持久化。當維護一個不是嚴格要求一致性的緩存時,如果用戶的購物車信息全部丟失,大部分人都會不高興的,現(xiàn)在,他們還會這樣嗎?

      幸運的是,隨著Redis這些年的改進,很容易找到怎么恰當?shù)氖褂肦edis來緩存會話的文檔。甚至廣為人知的商業(yè)平臺Magento也提供Redis的插件。

      ②全頁緩存(FPC)
      除基本的會話token之外,Redis 還提供很簡便的FPC平臺。回到一致性問題,即使重啟了Redis實例,因為有磁盤的持久化,用戶也不會看到頁面加載速度的下降,這是一個極大改進,類似PHP本地FPC。

      再次以Magento為例,Magento 提供一個插件來使用Redis 作為全頁緩存后端。

      此外,對WordPress的用戶來說,Pantheon 有一個非常好的插件wp redis,這個插件能幫助你以最快速度加載你曾瀏覽過的頁面。

      ③隊列
      Reids在內存存儲引擎領域的一-大優(yōu)點是提供list和set操作,這使得Redis能作為一個很好的消息隊列平臺來使用。Redis作為隊列使用的操作,就類似于本地程序語言(如Python)對list 的push/pop操作。

      如果你快速的在Google中搜索“Redis queues",你馬上就能找到大量的開源項目,這些項目的目的就是利用Redis創(chuàng)建非常好的后端工具,以滿足各種隊列需求。例如,Celery 有一個后臺就是使用Redis作為broker,你可以從這里去查看。

      ④排行榜/計數(shù)器
      Redis在內存中對數(shù)字進行遞增或遞減的操作實現(xiàn)的非常好。集合(Set)和有序集合(Sorted Set)也使得我們在執(zhí)行這些操作的時候變的非常簡單,Redis 只是正好提供了這

      兩種數(shù)據(jù)結構。所以,我們要從排序集合中獲取到排名最靠前的10個用戶-我們稱之為“user_scores", 我們只需要像下面一樣執(zhí)行即可:

      當然,這是假定你是根據(jù)你用戶的分數(shù)做遞增的排序。如果你想返回用戶及用戶的分數(shù),你需要這樣執(zhí)行:
      ZRANGE user scores 0 10 WITHSCORES

      Agora Games就是一個很好的例子,用Ruby實現(xiàn)的,它的排行榜就是使用Redis來存儲數(shù)據(jù)的,你可以在這里看到。

      ⑤發(fā)布/訂閱
      最后(但肯定不是最不重要的)是Redis的發(fā)布/訂閱功能。發(fā)布/訂閱的使用場景確實非常多。我已看見人們在社交網(wǎng)絡連接中使用,還可作為基于發(fā)布/訂閱的腳本觸發(fā)器,甚至用Redis的發(fā)布/訂閱功能來建立聊天系統(tǒng)!

      6.Redis集群方案哪些方案?
      ①codis
      目前用的最多的集群方案,基本和twemproxy-致的效果,但它支持在節(jié)點數(shù)量改變情況下,舊節(jié)點數(shù)據(jù)可恢復到新hash節(jié)點。

      ②redis
      cluster3.0自帶的集群,特點在于他的分布式算法不是一致性hash,而是hash槽的概念,以及自身支持節(jié)點設置從節(jié)點。具體看官方文檔介紹。

      ③在業(yè)務代碼層實現(xiàn)
      起幾個毫無關聯(lián)的redis實例,在代碼層,對key進行hash計算,然后去對應的redis實例操作數(shù)據(jù)。這種方式對hash層代碼要求比較高,考慮部分包括,節(jié)點失效后的替代算法方案,數(shù)據(jù)震蕩后的自動腳本恢復,實例的監(jiān)控,等等。

      北大青鳥網(wǎng)上報名
      北大青鳥招生簡章
      主站蜘蛛池模板: 高清一区二区三区免费视频| asmr国产一区在线| 日韩色视频一区二区三区亚洲| 成人乱码一区二区三区av| 国产香蕉一区二区三区在线视频 | 亚洲国产美国国产综合一区二区| 波多野结衣中文字幕一区二区三区| 亚洲福利电影一区二区?| 国产亚洲福利精品一区| 成人区人妻精品一区二区不卡网站| 视频一区二区三区在线观看| 精品一区二区三区| 日本高清一区二区三区| 99精品国产高清一区二区麻豆| 一区二区视频在线| 日本免费一区二区三区四区五六区| 亚洲一区精品无码| 国产精华液一区二区区别大吗| 免费观看一区二区三区| 亚洲中文字幕无码一区| 人妻体内射精一区二区三区| 色窝窝无码一区二区三区色欲| 性色AV一区二区三区| 少妇无码一区二区三区免费| 色噜噜狠狠一区二区三区果冻| 亚洲一区二区成人| 99无码人妻一区二区三区免费| 精品动漫一区二区无遮挡| 亚洲日韩国产欧美一区二区三区| 亚洲熟妇AV一区二区三区宅男| 久热国产精品视频一区二区三区| 亚洲无码一区二区三区| 国产剧情一区二区| 一区三区三区不卡| 久久婷婷色一区二区三区| 精品欧洲av无码一区二区三区| 麻豆AV无码精品一区二区| 日本福利一区二区| 国产成人精品一区二区三区无码| 无码精品视频一区二区三区| 日韩一区二区在线视频|