2016年5月11日摘自知乎的一些Redis大概了解


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命令后就開始保存快照,在此期間,所有發給主數據庫的命令都被緩存起來;快照保存完成后,主數據庫把快照和緩存的命令一起發給從數據庫;從數據庫保存主數據庫發來的快照文件,並依次執行主數據庫發來的緩存命令。在同步過程中,從數據庫不會阻塞,它默認使用同步之前的數據繼續響應客戶端發來的命令。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM