天天看點

阿裡架構師8問Redis,全對算你赢

1、Redis 官方為什麼不提供 Windows 版本?

因為目前 Linux 版本已經相當穩定,且Linux作業系統自帶的epoll相關函數, 在高并發情況下性能一般比windows的select函數性能較好,為了高性能起見, Redis官網不提供windows 版本。

阿裡架構師8問Redis,全對算你赢

2、使用Redis有什麼缺點?

緩存和資料庫雙寫一緻性問題

緩存雪崩問題

緩存擊穿問題

緩存的并發競争問題

3、Redis是單線程還是多線程?

回答: 主線程是單線程, 但6.0版本前後線程機制有做調整, 隻要看懂下面這張圖即可(看不懂沒關系, 後面會講到)

阿裡架構師8問Redis,全對算你赢

4、MySQL 裡有 2000w 資料,redis 中隻存 20w 的資料,如何保證 redis 中的資料都是熱點資料?

非常簡單, 當Redis 記憶體資料集大小上升到一定大小的時候,就會施行資料淘汰政策。

5、Redis過期政策和記憶體淘汰機制?

正解:Redis采用的是定期删除+惰性删除政策。

6、Redis 的持久化底層如何實作的?有什麼優點缺點?

RDB: 在不同的時間點将 redis 的資料生成的快照同步到磁盤等媒體上):記憶體到硬碟的快照,定期更新。缺點:耗時,耗性能(fork+io 操作),易丢失資料。

AOF:将 redis 所執行過的所有指令都記錄下來,在下次 redis 重新開機時,隻需要執行指令就可以了):寫日志。缺點:體積大,恢複速度慢。

Redis4.0 之後有了混合持久化的功能,将 bgsave 的全量和 aof 的增量做了融合處理,這樣既保證了恢複的效率又兼顧了資料的安全性。

7、什麼是緩存穿透?如何解決緩存穿透問題?

指查詢一個一定不存在的資料,如果從存儲層查不到資料則不寫入緩存,這将導緻這個不存在的資料每次請求都要到 DB 去查詢,可能導緻 DB 挂掉。

穿透解決方案如下:

1.查詢傳回的資料為空,仍把這個空結果進行緩存,但過期時間會比較短;

2.布隆過濾器:将所有可能存在的資料哈希到一個足夠大的 bitmap 中,一個一定不存在的資料會被這個 bitmap 攔截掉,進而避免了對 DB 的查詢。

8、Redis 常見的性能問題和解決方案

這個你能答上來嗎?

Redis也是大廠面試最愛問的,除了上面這些問題,還包括Redis用戶端、Redis進階功能、Redis持久化和開發運維常用問題探讨、Redis複制的原理和優化政策、Redis分布式解決方案等。