日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

「面试必背」Redis面试题(2022最新版)

發(fā)布時間:2023/12/8 数据库 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 「面试必背」Redis面试题(2022最新版) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

作為一個后端開發(fā)人員,不只是要求開發(fā)人員需要掌握 Redis,也要求運維人員也要懂 Redis。由于 Redis 的運用廣泛,我們也知道它的重要性,至此面試中經常被問到。在這 80道 Redis 面試題中,考察知識點包括基礎、數(shù)據(jù)結構指令、高并發(fā)處理、持久化、集群、復制、Redis 應用等。如果你最近在準備面試或者在學習 Redis,我相信本次小編可以滿足你的面試需要。也希望我花了半個月整理的這些題目,解答對你有所幫助。

1、什么是 Redis?

Redis 是一個使用 C 語言寫成的,開源的高性能key-value非關系緩存數(shù)據(jù)庫。它支持存儲的value 類型相對更多,包括string(字符串)、list(鏈表)、set(集合)、zset(sorted set --有序集合)和 hash(哈希類型)。Redis的數(shù)據(jù)都基于緩存的,所以很快,每秒可以處理超過 10萬次讀寫操作,是已知性能最快的Key-Value DB。Redis也可以實現(xiàn)數(shù)據(jù)寫入磁盤中,保證了數(shù)據(jù)的安全不丟 失,而且Redis的操作是原子性的。

2、Redis 的數(shù)據(jù)類型?

Redis主要有5種數(shù)據(jù)類型,包括String,List,Set,Zset,Hash,滿足大部分的使用要求

3、使用 Redis 有哪些好處?

(1) 速度快,因為數(shù)據(jù)存在內存中,類似于HashMap,HashMap的優(yōu)勢就是查找和操作的時間復

雜度都很低

(2)支持豐富數(shù)據(jù)類型,支持string,list,set,sorted set,hash

(3) 支持事務,操作都是原子性,所謂的原子性就是對數(shù)據(jù)的更改要么全部執(zhí)行,要么全部不執(zhí)行

(4) 豐富的特性:可用于緩存,消息,按key設置過期時間,過期后將會自動刪除

4、Redis 相比 Memcached 有哪些優(yōu)勢?

  • 1、Memcached 所有的值均是簡單的字符串,?redis?作為其替代者, 支持更為豐富的數(shù)據(jù)類
  • 2、Redis 的速度比 Memcached 快很3、Redis 可以持久化其數(shù)據(jù)

5、Memcache 與 Redis 的區(qū)別都有哪些?

1、存儲方式 Memecache 把數(shù)據(jù)全部存在內存之中, 斷電后會掛掉, 數(shù)據(jù)不能超過內存大小。 Redis有部份存在硬盤上, 這樣能保證數(shù)據(jù)的持久性

2、數(shù)據(jù)支持類型 Memcache 對數(shù)據(jù)類型支持相對簡單。 Redis 有復雜的數(shù)據(jù)類型。

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

6、Redis 是單進程單線程的?

  • 答: Redis 是單進程單線程的,?redis?利用隊列技術將并發(fā)訪問變?yōu)榇性L問, 消除了傳統(tǒng)數(shù)據(jù)庫串行控制的開銷。

7、一個字符串類型的值能存儲最大容量是多少?

  • 答: 512M

8、Redis 的持久化機制是什么?各自的優(yōu)缺點?

Redis 提供兩種持久化機制 RDB(默認) 和 AOF 機制:

RDB:是Redis DataBase縮寫快照

  • RDB是Redis默認的持久化方式。按照一定的時間將內存的數(shù)據(jù)以快照的形式保存到硬盤中,對應產生的數(shù)據(jù)文件為dump.rdb。通過配置文件中的save參數(shù)來定義快照的周期。

優(yōu)點:

  • 只有一個文件 dump.rdb,方便持久化。
  • 容災性好,一個文件可以保存到安全的磁盤。
  • 性能最大化,fork 子進程來完成寫操作,讓主進程繼續(xù)處理命令,所以是 IO 最大化。使用單 獨子進程來進行持久化,主進程不會進行任何 IO 操作,保證了?redis?的高性能
  • 相對于數(shù)據(jù)集大時,比 AOF 的啟動效率更高。
  • 缺點:

  • 數(shù)據(jù)安全性低。RDB 是間隔一段時間進行持久化,如果持久化之間?redis?發(fā)生故障,會發(fā)生數(shù) 據(jù)丟失。所以這種方式更適合數(shù)據(jù)要求不嚴謹?shù)臅r候)
  • AOF(Append-only fifile)持久化方式: 是指所有的命令行記錄以?redis?命令請 求協(xié)議的格式 完全持久化存儲)保存為 aof 文件。
  • AOF:持久化:

    • AOF持久化(即Append Only File持久化),則是將Redis執(zhí)行的每次寫命令記錄到單獨的日志文件
    • 中,當重啟Redis會重新將持久化的日志中文件恢復數(shù)據(jù)。當兩種方式同時開啟時,數(shù)據(jù)恢復Redis會優(yōu)先選擇AOF恢復

    優(yōu)點:

  • 數(shù)據(jù)安全,aof 持久化可以配置 appendfsync 屬性,有 always,每進行一次 命令操作就記錄 到 aof 文件中一次。
  • 通過 append 模式寫文件,即使中途服務器宕機,可以通過?redis-check-aof 工具解決數(shù)據(jù)一 致性問題。
  • AOF 機制的 rewrite 模式。AOF 文件沒被 rewrite 之前(文件過大時會對命令 進行合并重寫),可以刪除其中的某些命令(比如誤操作的 flflushall))
  • 缺點:

  • AOF 文件比 RDB 文件大,且恢復速度慢。
  • 數(shù)據(jù)集大的時候,比 rdb 啟動效率低。
  • 倆種持久化的優(yōu)缺點是什么?

    • AOF文件比RDB更新頻率高,優(yōu)先使用AOF還原數(shù)據(jù)。
    • AOF比RDB更安全也更大
    • RDB性能比AOF好
    • 如果兩個都配了優(yōu)先加載AOF

    9、Redis 常見性能問題和解決方案:

    10、Redis 過期鍵的刪除策略?

    11、Redis 的回收策略(淘汰策略)?

    12、為什么 Redis 需要把所有數(shù)據(jù)放到內存中?

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

    13、Redis 的同步機制了解么?

    • 答:Redis 可以使用主從同步,從從同步。第一次同步時,主節(jié)點做一次 bgsave, 并同時將后續(xù)修改操作記錄到內存 buffffer, 待完成后將 rdb 文件全量同步到復制節(jié)點, 復制節(jié)點接受完成后將 rdb 鏡像加載到內存。加載完成后, 再通知主節(jié)點將期間修改的操作記錄同步到復制節(jié)點進行重放就完成了同步過程。

    14、Pipeline 有什么好處,為什么要用 pipeline?

    • 答:可以將多次 IO 往返的時間縮減為一次,前提是 pipeline 執(zhí)行的指令之間沒有因果相關性。使用redis-benchmark 進行壓測的時候可以發(fā)現(xiàn)影響?redis?的 QPS 峰值的一個重要因素是 pipeline 批次指令的數(shù)目。

    15、是否使用過 Redis 集群,集群的原理是什么?

  • 、Redis Sentinal 著眼于高可用, 在 master 宕機時會自動將 slave 提升為master, 繼續(xù)提供服務。
  • 、Redis Cluster 著眼于擴展性, 在單個?redis?內存不足時, 使用 Cluster 進行分片存儲。
  • 16、Redis 集群方案什么情況下會導致整個集群不可用?

    • 答: 有 A, B, C 三個節(jié)點的集群,在沒有復制模型的情況下,如果節(jié)點 B 失敗了, 那么整個集群就會以為缺少 5501-11000 這個范圍的槽而不可用。

    17、Redis 支持的 Java 客戶端都有哪些?官方推薦用哪個?

    • 答: Redisson、Jedis、lettuce 等等, 官方推薦使用 Redisson。

    18、Jedis 與 Redisson 對比有什么優(yōu)缺點?

    • 答: Jedis 是 Redis 的 Java 實現(xiàn)的客戶端, 其 API 提供了比較全面的 Redis 命令的支持;Redisson 實現(xiàn)了分布式和可擴展的 Java 數(shù)據(jù)結構,和 Jedis 相比,功能較為簡單, 不支持字符串操作, 不支持排序、事務、管道、分區(qū)等 Redis 特性。Redisson 的宗旨是促進使用者對 Redis 的關注分離,從而讓使用者能夠將精力更集中地放在處理業(yè)務邏輯上。

    19、Redis 如何設置密碼及驗證密碼?

    • 設置密碼: confifig set requirepass 123456 授權密碼: auth 123456

    20、說說 Redis 哈希槽的概念?

    • 答: Redis 集群沒有使用一致性 hash,而是引入了哈希槽的概念, Redis 集群有16384 個哈希槽,每個key 通過 CRC16 校驗后對 16384 取模來決定放置哪個槽, 集群的每個節(jié)點負責一部分 hash 槽。

    21、Redis 集群的主從復制模型是怎樣的?

    • 答: 為了使在部分節(jié)點失敗或者大部分節(jié)點無法通信的情況下集群仍然可用, 所以集群使用了主從復制模型,每個節(jié)點都會有 N-1 個復制品.

    22、Redis 集群會有寫操作丟失嗎?為什么?

    • 答:Redis 并不能保證數(shù)據(jù)的強一致性,這意味這在實際中集群在特定的條件下可能會丟失寫操作。

    23、Redis 集群之間是如何復制的?

    • 答: 異步復制

    24、Redis 集群最大節(jié)點個數(shù)是多少?

    • 答: 16384 個。

    25、Redis 集群如何選擇數(shù)據(jù)庫?

    • 答: Redis 集群目前無法做數(shù)據(jù)庫選擇, 默認在 0 數(shù)據(jù)庫。

    26、怎么測試 Redis 的連通性?

    • 答: 使用 ping 命令。

    27、怎么理解 Redis 事務?

    答:

    1) 事務是一個單獨的隔離操作: 事務中的所有命令都會序列化、按順序地執(zhí)行。事務在執(zhí)行的過程中, 不會被其他客戶端發(fā)送來的命令請求所打斷。

    2) 事務是一個原子操作: 事務中的命令要么全部被執(zhí)行, 要么全部都不執(zhí)行。

    28、Redis 事務相關的命令有哪幾個?

    • 答: MULTI、EXEC、DISCARD、WATCH

    29、Redis key 的過期時間和永久有效分別怎么設置?

    答: EXPIRE 和 PERSIST 命令。

    30、Redis 如何做內存優(yōu)化?

    31、Redis 回收進程如何工作的?

    32、都有哪些辦法可以降低 Redis 的內存使用情況呢?

    33、Redis 的內存用完了會發(fā)生什么?

    34、一個 Redis 實例最多能存放多少的 keys?List、Set、Sorted Set 他們最多能存放多少元素?

    35、MySQL 里有 2000w 數(shù)據(jù),redis?中只存 20w 的數(shù)據(jù),如何保證?redis?中的數(shù)據(jù)都是熱點數(shù)據(jù)?

    36、Redis 最適合的場景?

    37、假如 Redis 里面有 1 億個 key,其中有 10w 個 key 是以某個固定的已知的前綴開頭的,如果將它們全部找出來?

    38、如果有大量的 key 需要設置同一時間過期,一般需要注意什么?

    39、使用過 Redis 做異步隊列么,你是怎么用的?

    40、使用過 Redis 分布式鎖么,它是什么回事?

    41、如何實現(xiàn)集群中的 session 共享存儲?

    42、memcached 與redis?的區(qū)別?

    43、查看 Redis 使用情況及狀態(tài)信息用什么命令?

    44、Redis 的內存用完了會發(fā)生什么?

    45、Redis 是單線程的,如何提高多核 CPU 的利用率?

    46、一個 Redis 實例最多能存放多少的 keys?List、Set、Sorted Set 他們最多能存放多少元素?

    47、Redis 常見性能問題和解決方案?

    48、Redis 提供了哪幾種持久化方式?

    49、如何選擇合適的持久化方式?

    50、修改配置不重啟 Redis 會實時生效嗎?

    總結了很多有關于java面試的資料,希望能夠幫助正在學習java的小伙伴。由于資料過多不便發(fā)表文章,創(chuàng)作不易,望小伙伴們能夠給我一些動力繼續(xù)創(chuàng)建更好的java類學習資料文章,
    請多多支持和關注小作,別忘了點贊+評論+轉發(fā)。右上角私信我回復【999】即可領取免費學習資料謝謝啦!

    總結

    以上是生活随笔為你收集整理的「面试必背」Redis面试题(2022最新版)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。