菜鳥刷面試題(三 Redis篇)

2022-05-03 12:54:20 字數 1443 閱讀 6125

1、redis是一款開源的、基於c語言編寫的key value資料庫,其資料讀寫基於記憶體,效能高。

2、redis使用場景很多:

資料持久化、事務、發布訂閱訊息、主從複製、集群、哨兵等等。

memecache目前僅支援k/v型別的資料儲存,而redis支援的儲存方式更加豐富

memecache掛掉了資料就沒了,redis有持久化策略。

我們首先要知道redis是乙個高效的key/value資料庫,且採用記憶體讀寫資料

那麼既然是記憶體讀寫資料的話單執行緒的效率肯定是最高的,因為多執行緒的本質就是cpu模擬出來多個執行緒的情況,這種模擬出來的執行緒勢必會有上下文切換的消耗,所以對於記憶體系統來說沒有上下文的切換就是最高效的

參考:1、什麼是快取穿透:快取穿透查詢乙個根本不存在的資料,導致每次請求都不會命中快取,請求都進到db,導致db壓力過大而降低db吞吐量,嚴重時可能會讓db宕機;一般是自身業務**或資料出現問題,或是乙個惡意攻擊、爬蟲等造成的。

2、怎麼解決:

string、list、hash、set、sorted set。

可以再細說下編碼以及這些資料型別的特性等等。

jedis、redisson、lettuce等等,官方推薦使用redisson

簡介:區別:

靈活性:jedis對於redisson來說更加靈活。

1、讀資料:先讀快取,後讀資料庫。

2、寫資料:先寫資料庫,後寫快取。

3、每次更新資料都要把快取清掉。

4、快取設定過期時間,保持與資料庫的最終一致性。

參考:見: redis持久化

1、手動實現:如果key存在則返回已鎖,不存在則加鎖,還可以設定鎖的時間,並需要及時解鎖。

2、使用redisson api實現

1、可能會造成死鎖

客戶端a獲取鎖成功了,但釋放鎖的時候崩潰了,導致鎖依然存在。我們可以通過設定過期時間來解決這一問題。

2、錯誤的獲取鎖

上面說到可以設定過期時間來預防死鎖,但若客戶端a執行之間過長或因為某些原因導致客戶端a阻塞了,這是鎖可能已經過期了,然後客戶端b又拿到了鎖。

此時客戶端a又恢復了過來,這樣便會有兩個執行緒執行操作,導致最終的資料不一致。

參考:1、設定記憶體上限:maxmemory

2、可根據實際情況調整記憶體淘汰策略

3、壓縮鍵值對的長度

4、盡可能的使用hash結構,減少key的數量(對ziplist編碼的妙用)

見: 快取設計第a節

刷php面試題

在mysql中乙個資料庫中可以同時存在多種引擎,儲存引擎是針對表的。事物 myisam 不支援事物 innode 支援事物 儲存空間 myisam 的表儲存成3個檔案。檔案的名字與表名相同,frm檔案儲存表的結構,myd檔案儲存資料,myi檔案儲存索引。innode 所有的表都儲存在同乙個資料檔案中...

面試題集 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常見的效能問題和解決...