1. 程式人生 > >摘抄自知乎的redis相關

摘抄自知乎的redis相關

小數據 多應用 hash索引 明顯 關系 數據緩存 0ms 應用 aof

1.知乎日報的基礎數據和統計信息是用 Redis 存儲的,這使得請求的平均響應時間能在 10ms 以下。
其他數據仍然需要存放在另外的地方,其實完全用 Redis 也是可行的,主要的考量是內存占用。
就使用經驗而言,Redis 的數據結構很豐富,精心設計地話,能滿足很多應用場景。至少很多時候比 MySQL 更方便
2.單獨使用Redis的話,它是成當不起數據庫的任務,比如你每日活躍用戶是1萬人,但是你那臺redis裏面已經積累了50萬人了(這個比例很正常),那麽每次redis啟動,就需要把50萬load內存,每次redis備份,又需要把50萬dump到磁盤,這靠譜麽?
把冷數據落地到mongo,熱數據在用redis存儲。

3.redis是目前公認的速度最快的基於內存的鍵值對數據庫,但redis的缺點也非常明顯,僅提供最基本的hash set, list, sorted set等基於數據類型,不分表,沒有schema,沒有索引,沒有外鍵,缺少int/date等基本數據類型,多條件查詢需要通過集合內聯(sinter,zinterstore)和連接間接實現,操作不便,開發效率低,可維護性不佳; 因此一般不將其視為完整的數據庫單獨使用,很多網站將redis作為高速緩存和session狀態存儲層,然後再與其他數據庫搭配使用。

4.核心業務建議數據還是落地到mysql,redis在異常情況下回丟數據。
非核心業務,比如運營推廣,數據聚合統計這種允許數據少量丟失的業務可以全用mysql,擴展方便,效率高,業務量也不大。特別是運營推廣這種時效性很強的業務,在推廣結束後數據接沒用了,Redis內存壓力也不會很大。
mysql能支持對各個字段的查詢,Redis的查詢僅限於對key的簡單匹配,如果要對value進行復雜查詢,不適合用Redis。

5.目前redis做數據庫還不太靠譜。它支持的數據類型太少,而且查詢功能太弱。redis並不是為了作為數據庫使用的,它更多地是一個高速存取器,一般用作緩存和類似場景。

6.redis是一種k/v的內存數據庫,適合小數據量的存儲以及實時要求高的地方,但是不適合做完整數據庫,完整數據庫基本上都有一套詳細解決方案,比如mysql。
我們項目裏用到的redis是用來做緩存的,設置過期時間,到時就自動清掉。數據庫還是用mysql等這種成熟的方案。
如果你非要用一種nosql來做數據庫,推薦你用Mongodb

7.redis能否做數據庫用取決於如下幾個條件:
1:數據量,畢竟內存數據庫,還是受限於內存的容量,雖然可以redis可以持久化。
2:數據的結構,是否能夠將關系型數據結構都轉換為key/value的形式。
3:查詢的效率,對範圍查詢等,是否能轉換為高效的hash索引查詢

8.MongoDB不是內存型數據庫,他只不過把所有文件索引存到內存裏而已。同樣的機型,用MongoDB會比Redis存更多,但Redis響應更快。關鍵的是看量有多大。

9.MongoDB是nosql數據庫,它支持把一部分熱數據放到內存中,方便用戶更快的去處理它。

Redis是內存型數據庫,是完全的內存數據庫!所有的數據都在內存,不存在硬盤一部分,內存一部分的情況。當然可以用save去存數據到硬盤,但這是為了備份安全性考慮而不是使用。

10.一個哈希實際上是一組鍵值對的集合,哈希本身的鍵是“父鍵”,哈希中包含的若幹字段是“子鍵”,每個“子鍵”都有相應的值。“子鍵”之間並沒有一定的聯系,但是它們共同組成了一個完整的哈希結構。我們可以把一個哈希看做關系數據庫中的一行,哈希的每個子鍵對應行的一個字段。因此,當把關系數據庫中的數據緩存至Redis時,使用哈希結構可能會帶來方便。需要註意的是,哈希結構內部的子鍵之間是沒有順序關系的。

11.Redis是一種內存數據庫,這使其在數據存取效率方面表現突出。由於內存中的數據時刻面臨丟失的危險,Redis提供了兩種持久化機制,及時將內存中的數據寫入硬盤。第一種機制為RDB,利用存儲快照的方式把內存數據定期寫入硬盤;第二種機制為AOF,利用寫日誌的方式,每執行一條更改Redis數據的命令,就在日誌裏附加上該命令並保存在硬盤上。Redis默認開啟RDB模式,關閉AOF模式,這是因為AOF更加耗時。但是,如果對數據安全要求極高,無法承擔任何數據丟失的後果,AOF模式就變成了持久化的首選。
當然,即使Redis具備持久化機制,但是一旦本地硬盤損壞,數據丟失依然在所難免。所以,Redis又提供了復制功能,作用是將一個主數據庫(master)的數據自動同步到多個從數據庫(slave),從而盡可能防止數據丟失。Redis主從機制可以簡單描述為:從數據庫啟動後,先向主數據庫發送SYNC命令;主數據庫接到SYNC命令後就開始保存快照,在此期間,所有發給主數據庫的命令都被緩存起來;快照保存完成後,主數據庫把快照和緩存的命令一起發給從數據庫;從數據庫保存主數據庫發來的快照文件,並依次執行主數據庫發來的緩存命令。在同步過程中,從數據庫不會阻塞,它默認使用同步之前的數據繼續響應客戶端發來的命令。

摘抄自知乎的redis相關