天天看點

【七天玩轉Redis實戰營】答疑彙總Day4 Redis的開發規範和常見問題

【第四講,Redis的開發規範和常見問題】

講師:曉翌,阿裡雲NoSQL核心工程師;

課程内容:為什麼要制定開發規則;阿裡内部系統的開發規約;Redis的常見問題處理。答疑彙總:特感謝班委@張鵬 同學

【七天玩轉Redis實戰營】答疑彙總Day4 Redis的開發規範和常見問題

1.    Redis 無法實作彈性擴容的功能嗎?

可以彈性擴容,如果增加分片數,需要重新配置設定 slot 及資料遷移,做一次resharding。如果隻增加記憶體,無需其它操作。

2.    一台主機能部署多套 Redis 嗎?

可以。為了降低當機帶來的影響,不推薦一台主機部署多套 Redis。如果有兩個副本,至少要把主備副本分開,部署在不同主機。

3.    大排行榜在什麼量級會有明顯性能問題?

大 key 取值複雜度在 O(n) 級别且資料量比較大的時候會帶來比較明顯的影響。如果隻取其中的幾項或者複雜度為O(logn) 或O(1) 級别,這種影響不大。盡量不要做大範圍的 range, 不要做O(n) 級别的操作。

4.    什麼時候講場景中如何使用 Redis ,比如:秒殺、釘釘打卡。

請關注第六講《Redis 的高并發實戰:搶購系統 --淺奕》

https://developer.aliyun.com/article/783041

5.    雲 Redis 中實時發現 bigKey 是怎樣實作的?

實時采樣統計計算,上線之後可以試用一下。

6.    RT 是什麼意思?

請求的延時,Response Time

7.    每個使用者記錄一條資料,把 Redis 當緩存用,一種是給所有 key 設定過期時間,一種是不設定過期時間,讓 Redis 在達到記憶體上限時,做LRU 清理,哪種方案比較合理?

可以看下 阿裡雲Redis 官網過期key的清理政策,Redis 在達到記憶體上限時,做 LRU 清理其實是不可控的,不好控制哪些 key 被清理;此外如果記憶體用的比較滿,在請求量較大時動态記憶體快速上漲,有OOM的風險,不建議記憶體用滿。

配置過期時間是可控的,是比較好的,可以自行配置每一批key的失效時間,也可以從控制台主動清理全部過期key,加速清理。目前官網maxmemory-policy預設配置了volatile-lru,記憶體用滿後key設定了過期時間才會逐出,key不設定過期時間的話,記憶體達到最大用戶端是會報錯的。

8.    Redis 有什麼漏洞,平時如何防範攻擊?

阿裡雲一般是部署在 vpc 裡邊,做了網絡隔離,是很有保障的。如果開了公網,要把密碼設定的複雜一些。

9.    Redis 和 Mysql 如何配合使用?

Redis 當緩存使用,Mysql 來持久化資料。典型的模式有Cache Aside。

10.  Redis Lua 腳本建議使用嗎?性能如何?

不太建議使用,Lua 腳本從編譯到運作大量消耗 CPU。

11.  建議什麼場景下使用 Lua 腳本?

不建議使用。

12.  Redis 企業版和社群版的主要差別是什麼?性能差異大嗎?

性能差别比較大,性能增加了2到3倍,連接配接數增加到3倍左右。社群版連接配接數上限是1萬,連接配接數比較多建議使用企業版。單分片熱點超過 10萬QPS,也建議用企業版。

13.  Redis 中存了項目所有使用者的資訊,第一個方案是講對象進行了 hashset 的方式存儲,另一個方案是将對象序列化後存入,取的時候再轉對象,哪種方法比較好?

這兩種方法,推薦hashset的用法,因為将對象序列化存進去後,如果要更新某個字段,隻能将對象整體取出後再整體更新,而hashset可以做到部分更新字段,消耗的網絡流量方面會有資料量的差距。此外,hashset的部分更新字段隻适用于一層對象結構,如果對象有多層,hashset也沒有那麼友善,還需要再次将二層對象序列化後處理,這裡推薦Redis企業版TairDoc Module,可以處理Json形式的結構,多層也可以做到部分更新字段,性能比較強。

14.  所有的 key 都帶過期時間會不會給 Redis 帶來性能開銷問題?

Redis 背景會起一個線程,定時的去掃,随機删除一些過期的 key。對性能沒有什麼影響。

15.  Redis 如何與其它 NoSql 資料庫配合使用?

比如和mongodb 配合進行冷熱資料存儲。Tair 本身可以進行冷熱資料配合存儲。

16.  Lua 耗CPU是耗 Redis 主程序的CPU 還是其它 CPU?

Lua 耗的 CPU 就是主程序的 CPU。