Redis面試題(二)

2021-10-14 02:47:41 字數 2529 閱讀 4264

目錄

過期鍵的刪除策略

redis的過期鍵的刪除策略

redis key的過期時間和永久有效分別怎麼設定?

我們知道通過expire來設定key 的過期時間,那麼對過期的資料怎麼處理呢?

記憶體相關

mysql裡有2000w資料,redis中只存20w的資料,如何保證redis中的資料都是熱點資料

redis的記憶體淘汰策略有哪些

redis主要消耗什麼物理資源?

redis的記憶體用完了會發生什麼?

redis如何做記憶體優化?

執行緒模型

redis執行緒模型 事務

什麼是事務?

redis事務的概念

redis事務的三個階段

事務管理(acid)概述

redis事務支援隔離性嗎

redis事務保證原子性嗎,支援回滾嗎

redis事務其他實現

我們都知道,redis是key-value資料庫,我們可以設定redis中快取的key的過期時間。redis的過期策略就是指當redis中快取的key過期了,redis如何處理。

過期策略通常有以下三種:

redis中同時使用了惰性過期和定期過期兩種過期策略。

expire和persist命令。

除了快取伺服器自帶的快取失效策略之外(redis預設的有6中策略可供選擇),我們還可以根據具體的業務需求進行自定義的快取淘汰,常見的策略有兩種:

定時去清理過期的快取;

當有使用者請求過來時,再判斷這個請求所用到的快取是否過期,過期的話就去底層系統得到新資料並更新快取。

兩者各有優劣,第一種的缺點是維護大量快取的key是比較麻煩的,第二種的缺點就是每次使用者請求過來都要判斷快取失效,邏輯相對比較複雜!

具體用哪種方案,大家可以根據自己的應用場景來權衡。

redis記憶體資料集大小上公升到一定大小的時候,就會施行資料淘汰策略

redis的記憶體淘汰策略是指在redis的用於快取的記憶體不足時,怎麼處理需要新寫入且需要申請額外空間的資料。

全域性的鍵空間選擇性移除

設定過期時間的鍵空間選擇性移除

總結

redis的記憶體淘汰策略的選取並不會影響過期的key的處理。記憶體淘汰策略用於處理記憶體不足時的需要申請額外空間的資料;過期策略用於處理過期的快取資料。

記憶體。如果達到設定的上限,redis的寫命令會返回錯誤資訊(但是讀命令還可以正常返回。)或者你可以配置記憶體淘汰機制,當redis達到記憶體上限時會沖刷掉舊的內容。

可以好好利用hash,list,sorted set,set等集合型別資料,因為通常情況下很多小的key-value可以用更緊湊的方式存放到一起。

盡可能使用雜湊表(hashes),雜湊表(是說雜湊表裡面儲存的數少)使用的記憶體非常小,所以你應該盡可能的將你的資料模型抽象到乙個雜湊表裡面。

比如你的web系統中有乙個使用者物件,不要為這個使用者的名稱,姓氏,郵箱,密碼設定單獨的key,而是應該把這個使用者的所有資訊儲存到一張雜湊表裡面。

redis基於reactor模式開發了網路事件處理器,這個處理器被稱為檔案事件處理器(file event handler)。它的組成結構為4部分:多個套接字、io多路復用程式、檔案事件分派器、事件處理器。因為檔案事件分派器佇列的消費是單執行緒的,所以redis才叫單執行緒模型。

雖然檔案事件處理器以單執行緒方式執行, 但通過使用 i/o 多路復用程式來監聽多個套接字, 檔案事件處理器既實現了高效能的網路通訊模型, 又可以很好地與 redis 伺服器中其他同樣以單執行緒方式執行的模組進行對接, 這保持了 redis 內部單執行緒設計的簡單性。

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

事務是乙個原子操作:事務中的命令要麼全部被執行,要麼全部都不執行。

redis 事務的本質是通過multi、exec、watch等一組命令的集合。事務支援一次執行多個命令,乙個事務中所有命令都會被序列化。在事務執行過程,會按照順序序列化執行佇列中的命令,其他客戶端提交的命令請求不會插入到事務執行命令序列中。

總結說:redis事務就是一次性、順序性、排他性的執行乙個佇列中的一系列命令。

事務開始 multi

命令入隊

事務執行 exec

事務執行過程中,如果服務端收到有exec、discard、watch、multi之外的請求,將會把請求放入佇列中排隊。

原子性是指事務是乙個不可分割的工作單位,事務中的操作要麼都發生,要麼都不發生。

事務前後資料的完整性必須保持一致。

多個事務併發執行時,乙個事務的執行不應影響其他事務的執行

永續性是指乙個事務一旦被提交,它對資料庫中資料的改變就是永久性的,接下來即使資料庫發生故障也不應該對其有任何影響。

redis 是單程序程式,並且它保證在執行事務時,不會對事務進行中斷,事務可以執行直到執行完所有事務佇列中的命令為止。因此,redis 的事務是總是帶有隔離性的。

redis中,單條命令是原子性執行的,但事務不保證原子性,且沒有回滾。事務中任意命令執行失敗,其餘的命令仍會被執行。

面試題集 redis

1.redis常用的五種資料型別 1.string 字串 string是簡單的 key value 鍵值對,value 不僅可以是 string,也可以是數字。它是redis最基本的資料型別,乙個redis中字串value最多可以是512m。2.hash 雜湊 redis hash 是乙個鍵值對集合...

redis面試題整理

1 2000w資料,redis中只存20w的資料,如何保證redis中的資料都是熱點資料 2 memcached和redis的區別 3 memcache與redis的區別 4 redis和memcached的區別 5 redis和memcache區別對比,如何選擇 6 redis常見的效能問題和解決...

Redis面試題集合

0 redis為什麼是key,value的,為什麼不是支援sql的?1 redis是多執行緒還是單執行緒?回答單執行緒的請回吧,為什麼請回,請往下看 2 redis的持久化開啟了rdb和aof下重啟服務是如何載入的?3 redis如果做集群該如何規劃?akf cap如何實現和設計?4 10萬使用者一...