1. 程式人生 > >java面試—redis nosql資料庫

java面試—redis nosql資料庫

1.redis的特點
    redis是一款記憶體告訴快取資料庫。redis:遠端資料服務;由C語言編寫,典型的NoSql資料庫伺服器,redis是一個key-value儲存系統,它支援豐富的資料型別:String list set hash等
    redis本質上是一個key-value型別的記憶體資料庫,資料庫統統載入在記憶體當中進行操作,定期通過一步操作把資料庫資料flush到硬碟上進行儲存。因為是純粹記憶體操作,redis的效能非常出色,每秒可以處理超過10萬次讀寫操作,是已知效能最快的key-value DB。
    redis的最大魅力是支援儲存多種資料結構,此外單個value的最大限制是1GB,另外redis也可以對存入的key-value設定expire時間,redis的主要缺點是資料庫容量受到實體記憶體的限制,不能用作海量資料的高效能讀寫,因此redis適合的場景主要侷限在較小資料量的高效能操作和運算上。
2.redis把所有資料放到記憶體中:
    redis為了達到最快的讀寫速度將資料都讀寫達到記憶體中,並通過非同步的方式將資料寫入磁碟,所以redis具有快速和資料持久化的特徵,如果不將資料放在記憶體中,磁碟I/O速度為嚴重影響redis的效能,。如果設定了最大使用的記憶體,則資料已有記錄數達到記憶體限制值後不能繼續插入新值。
3.redis常見的效能問題
    1)、Master寫記憶體快照,save命令排程rdbsave函式,會阻塞主執行緒的工作,當快照比較大時對效能影響是非常大的,會間斷性暫停服務,所以master最好不要寫你記憶體快照。
    2)、Master AOF持久化,如果不重寫AOF檔案,這個持久化方式對效能的影響是最小的,但是AOF檔案會不斷增大,AOF檔案過大會影響Master重啟的恢復速度,master最好不要做任何持久化工作,包括記憶體快照和AOF日誌檔案,特別是不要啟動記憶體快照做持久化,如果資料比較關鍵,某個slave開啟AOF備份資料,策略為每秒同步一次。
    3)、master呼叫bgrewriteAOF重寫AOF檔案,AOF在重新的時候會佔大量的cpu和記憶體資源,導致服務load過高,出現短暫服務暫停現象。
    4)、redis主從複製的效能問題,為了主從複製的速度和連結的穩定性,slave和master最好在同一個區域網內
4.redis適合場景
    1)、會話快取(session cache) ;2)、全頁快取(FPC);(3)、佇列;(4)、排行榜/計數器;(5)、釋出/訂閱
5.redis優缺點
    優點:
    a.效能極高-redis能支援超過100k+每秒的讀寫頻率
    b.豐富的資料型別-redis支援二進位制的strings,lists,hashes,sets,以及ordered sets資料型別操作。
    c.原子-redis的所有操作都是原子性的,同時redis還支援對幾個操作全並後的原子性執行。
    d.豐富的特性-redis支援public/subscribe,通知,key過期等特性。
    缺點:
    a.由於是記憶體資料庫,所以單臺機器,儲存的資料量,跟機器本身的記憶體大小,雖然redis本身有key過期策略,但是還是需要提前預估和節約記憶體,如果記憶體增長過快,需要定期刪除資料。
    b.如果進行完整重同步,由於需要生成rdb檔案,並進行傳輸,會佔用主機的cpu,並會消耗頻寬,
    c.修改配置檔案,進行重啟,將硬碟中的資料載入進記憶體,時間比較久,在這個過程中,redis不能提供服務
6.redis的持久化
    RDB持久化:該機制可以在指定的時間間隔內生成資料集的時間點快照、
    AOF持久化:記錄伺服器執行的所有寫操作命令,並在伺服器啟動時,通過重新執行這些命令來還原資料集,AOF檔案中的命令全部以redis協議的格式來儲存,新命令會被追加到檔案的末尾,redis還可以在後臺對AOF檔案進行重寫,使得AOF檔案的體積不會超出儲存資料集狀態所需的實際大小;