1. 程式人生 > 資料庫 >Redis面試必會的題目

Redis面試必會的題目

Redis 支援哪幾種資料型別?

  • string:最基本的資料型別,二進位制安全的字串,最大512M
  • list:按照新增順序保持順序的 字串列表
  • set:無序的字串集合,不存在重複的元素
  • sorted set:已排序的字串集合
  • hash:key/value對的一種集合

Redis是單程序的還是單執行緒的?

Redis是單程序單執行緒的,Redis利用佇列技術將併發訪問變為序列訪問,消除了傳統資料庫序列控制的開銷。

Redis為什麼是單執行緒的?

多執行緒處理會設計到鎖,而且多執行緒處理會設計到執行緒切換而消耗CPU。因為CPU不會Redis的瓶頸,Redis的瓶頸最有可能是機器記憶體或者網路頻寬。單執行緒無法發揮多核CPU效能,不過可以通過在單機開啟Redis例項來解決。

Redis的優勢

  • 速度快。因為資料儲存於記憶體中,類似於HashMap,HashMap的優勢就是查詢和操作的時間複雜度都是O(1)
  • 支援豐富的資料型別,支援string,list,set,sorted set,hash
  • 支援事務,操作都是原子性,所謂的原子性就是對資料的更改要麼全部執行,要麼全部不執行
  • 豐富的特性:可用於快取,訊息,按key設定過期時間,過期後將會自動刪除

Redis和memcached有哪些優勢

  • memcached所有的值均是簡單的字串,Reids作為其替代者,支援更為豐富的資料型別
  • Redis的速度比memcached快很多
  • Redis可以持久化其資料
  • Redis支援資料的備份,即master/slave模式的資料備份

Redis有哪幾種資料淘汰策略

在Redis中,允許使用者設定最大使用記憶體大小server.maxmemory,當Redis記憶體資料集大小上升到一定大小的時候,就會執行資料淘汰策略

  • volatile-lru:從已設定過期的資料集中挑選最近最少使用的淘汰
  • volatile-ttl:從已設定過期的資料集中挑選將要過期的資料淘汰
  • volatile-random:從已設定過期的資料集中任意挑選資料淘汰
  • allkeys-lru:從資料集中挑選最近最少使用的資料淘汰
  • allkeys-random:從資料集中任意挑選資料淘汰
  • noenviction:禁止淘汰資料

Redis支援哪幾種持久化方式

  • RDB持久化

原理是將Redis在記憶體中的資料記錄定時dump到磁碟上的RDB檔案

指定的時間間隔內將記憶體中的資料集快照寫入磁碟,實際操作過程是fork一個子程序,先將資料集寫入臨時檔案,寫入成功後,再替換之前的檔案,用二進位制壓縮儲存。

  • AOF(append only file)持久化

原理是將Redis的操作日誌以追加的方式寫入檔案。

以日誌的形式記錄伺服器所處理的每一個寫、刪除操作,查詢操作不會記錄,以文字的方式記錄,可以開啟檔案看到詳細的操作記錄。當伺服器重啟的時候會重新執行這些命令來恢復原始的資料。AOF命令以Reids協議追加儲存每次寫的操作到檔案末尾。Redis還能對AOF檔案進行後臺重寫,使得AOF檔案的體積不至於過大。

Redis兩種持久化方式優缺點?

RDB持久化

優點:RDB檔案緊湊,體積小,網路傳輸快,適合全量複製;恢復速度比AOF快很多。當然,與AOF相比,RDB最重要的優點之一是對效能的影響相對較小

缺點:RDB檔案的致命缺點在與其資料快照的持久化方式決定了必然做不到實時持久化,而在資料越來越重要的今天,資料的大量丟失很多時候是無法接受的,因此AOF持久化稱為主流。此外,RDB檔案需要滿足特定格式,相容性差。

AOF持久化

與RDB持久化相對應,AOF的優點在於支援秒級持久化、相容性好,缺點是檔案大,恢復速度慢,對效能影響大

如何選擇Redis持久化方式策略?

在介紹持久化策略之前,首先要明白無論是RDB還是AOF,持久化的開啟都是要付出效能方面的代價的。對比RDB持久化,一方面是bdsave在進行fork操作時Redis主程序會阻塞,另一方面,子程序向硬碟寫資料也會帶來IO壓力;對於AOF持久化,向硬碟寫資料的頻率大大提高(everysec策略下為秒級),IO壓力更大,設定可能造成AOF追加阻塞檔案。此外,AOF檔案的重寫與RDB的basave類似,會有fork時的阻塞和子程序的IO壓力問題。相對來說,由於AOF向硬碟中寫資料的頻率更高,因此對Redis主程序效能的影響會更大。

在實際生產環境中,根據資料量、應用對資料的安全要求、預算限制等不同情況,會有各種各樣的持久化策略;如完全不使用任何持久化,使用RDB或AOF一種,或同事開啟RDB和AOF持久化等。此外,持久化的選擇必須與Redis的主從策略一起考慮,因為主從複製與持久化同樣具有資料備份的功能,而且主機master和從機slave可以獨立的選擇持久化方案。

Redis叢集的主從複製模型是怎樣的?

為了是在部分節點失敗或者大部分節點無法通訊的情況下叢集仍然可用,所以叢集是用了主從複製模型,每個節點都會有N-1個複製品

Redis叢集會有寫操作丟失嗎?為什麼?

Redis並不能保證資料強一致性,這意味著在實際中叢集在特定的條件下可能會丟失寫操作

Redis叢集之間是如何複製的

非同步複製

Redis如何做記憶體優化

儘可能使用散列表(hashes),散列表(是說列表裡面儲存的數少)使用的記憶體非常小,所以你應該儘可能的將你的資料模型抽象到一個散列表裡面,比如你的web系統中有一個使用者物件,不要為這個使用者的名稱,姓氏,郵箱,密碼設定單獨的key,而是應該把這個使用者所有資訊儲存到一張散列表中

Redis回收程序如何工作?

一個Client運行了新的命令,添加了新的資料,Redis會檢查記憶體使用情況,如果大於maxmemory的限制,則根據設定好的策略進行回收

Redis常用的使用場景

  • Session共享(單點登入)
  • 頁面快取
  • 佇列
  • 排行榜/計算器

以上就是Redis面試必會的題目的詳細內容,更多關於Redis面試題的資料請關注我們其它相關文章!