一、鍵的過期
Redis 可以為每個(gè)鍵設(shè)置過期時(shí)間,當(dāng)鍵過期時(shí),會(huì)自動(dòng)刪除該鍵。
二、事務(wù)與流水線
使用 MULTI 和 EXEC 命令將事務(wù)操作包圍起來,一次性發(fā)送給服務(wù)器,這種方式稱為流水線,它可以減少客戶端與服務(wù)器之間的網(wǎng)絡(luò)通信次數(shù)從而提升性能。
三、持久化
將內(nèi)存數(shù)據(jù)持久化到硬盤。
1. 快照持久化
將某個(gè)時(shí)間點(diǎn)的數(shù)據(jù)存放到硬盤。
缺點(diǎn):
如果系統(tǒng)發(fā)生故障,將會(huì)丟失最后一次創(chuàng)建快照之后的數(shù)據(jù)。
如果數(shù)據(jù)量很大,保存快照的時(shí)間會(huì)很長(zhǎng)。
2. AOF 持久化
對(duì)要寫入到硬盤的數(shù)據(jù)先存放到緩沖區(qū),再由以下同步選項(xiàng)決定何時(shí)寫入到硬盤:
| 選項(xiàng) | 同步頻率 |
|---|---|
| always | 每個(gè)寫命令都同步,嚴(yán)重減低服務(wù)器的性能 |
| everysec | 每秒同步一次,比較合適 |
| no | 由操作系統(tǒng)來決定,不能顯著提升性能,反而增加系統(tǒng)奔潰時(shí)數(shù)據(jù)丟失的數(shù)量 |
當(dāng)然,也可手動(dòng) file.fulsh() 寫入到硬盤。
AOF (Append Only File)文件是用來存放寫命令的,也就是要寫什么入硬盤。隨著服務(wù)器寫請(qǐng)求的增多,AOF 文件會(huì)越來越大,Redis 提供了一種將 AOF 重寫的特性,能夠去除 AOF 文件中的冗余寫命令。
四、復(fù)制
指主服務(wù)器復(fù)制到從服務(wù)器。
首次從服務(wù)器先載入主服務(wù)器發(fā)來的快照文件,之后接受主服務(wù)器發(fā)來的寫命令。
通過使用 slaveof host port 命令來讓一個(gè)服務(wù)器成為另一個(gè)服務(wù)器的從服務(wù)器。
在一個(gè) Redis 集群中,master 負(fù)責(zé)寫請(qǐng)求,slave 負(fù)責(zé)讀請(qǐng)求。
一方面 master 把讀請(qǐng)求分散到其他機(jī)器從而減少了服務(wù)器壓力;
另一方面 slave 專注于提供讀服務(wù)從而提高了響應(yīng)和讀取速度。
五、分片
數(shù)據(jù)分散到多個(gè) Redis 實(shí)例中。
對(duì)比將所有數(shù)據(jù)只存放的單臺(tái) redis 實(shí)例,能大大減輕 redis 實(shí)例壓力。
還有兩個(gè)問題:
一是如何分片,也就是如何合理地把數(shù)據(jù)分成一塊一塊,標(biāo)準(zhǔn)是什么?
二是在哪里進(jìn)行分片,客戶端?服務(wù)器?代理?
六、適用場(chǎng)景
- 緩存:將熱點(diǎn)數(shù)據(jù)放入緩存。
- 消息隊(duì)列:LIST 是雙向鏈表,適合用于消息隊(duì)列。
- 計(jì)數(shù)器:內(nèi)存數(shù)據(jù)庫(kù),適合計(jì)數(shù)器頻繁讀寫操作。
- 好友關(guān)系:兩個(gè) SET 的交集,可知兩個(gè)用戶的共同好友。
參考文檔:
https://github.com/CyC2018/Interview-Notebook/blob/master/notes/Redis.md