什麼是Redis
Redis是一款開源的記憶體中資料結構儲存,可以用作資料庫,快取和訊息代理。Redis支援包括string(字串)、list(列表)、set(集合)、zset(有序集合)及hash(雜湊)等資料型別儲存,並提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等多種語言的API支援。Redis具有內建的複製,Lua指令碼,LRU逐出,事務和不同級別的磁碟永續性,並透過Redis Sentinel和Redis Cluster自動分割槽提供了高可用性。
Redis框架Redis採用了C/S框架(Client/Server,客戶/伺服器模式),為了讓Redis的資料更穩定安全所有的資料操作和維護都在服務端執行,而使用者只需要透過Redis客戶端傳送相關的指令即可。Redis為不同的資料結構提供了相應的API,可以方便使用者對Redis進行各種操作。Redis是一對多伺服器,可以和多個客戶端相連。Client和Server可以是在同一裝置上,也可以在不同裝置上(Client可以透過Server的IP和埠進行訪問)。這樣設計的好處可以降低伺服器的開銷,充分利用兩端硬體環境的優勢。客戶端進行使用者事物處理,服務端進行資料處理。隨著redis對框架的不斷改進,實現了本地持久化、主從備份、哨兵模式、群集等高可用架構方案。
Redis的優勢Redis由C語言實現,具備超高的讀寫效能。Redis能讀的速度高達110000次/s,寫的速度高達81000次/s 。Redis資料存在記憶體中,資料操作極快。可以快速響應使用者需求,支撐海量的資料和流量。豐富的資料型別,支援String、Hash、List、Set、 SortSet等多種資料型別。同時提供了豐富的操作命令,可以滿足絕大部分的使用者需求。操作具有原子性,所有操作要麼成功執行要麼失敗完全不執行。豐富的特性,支援 publish/subscribe、通知、key過期等特性。可用於快取,訊息列隊。透過key設定過期時間,過期後將會自動刪除。支援資料持久化,可將存放在記憶體中的資料直接儲存到磁碟上。支援資料實時備份,即使宕機也可以及時地恢復資料。Redis的缺點記憶體儲存雖然快但是記憶體也容易緊缺。如果記憶體不足讀寫時就容易發生錯誤,所以記憶體增長過快則需要定期刪除資料。redis是單執行緒服務,單臺伺服器無法充分利用伺服器資源。修改配置檔案重啟需要將硬碟中的資料載入記憶體,這個過程redis無法提供服務。Redis應用場景在我們的Web專案中資料基本都是用資料庫來儲存的,只是根據專案不同使用的資料庫不同。市面上比較常用的資料庫為:MySQL、Microsoft SQL Server、Oracle、DB2、Access、Mongodb、Redis等,每種資料庫都有其特點和使用場景。Redis主要用來應對高併發、高讀/寫等問題,可以緩解伺服器壓力避免因海量資料訪問造成資料庫系統癱瘓甚至服務宕機等問題產生(比如淘寶雙11狂歡,一天要承載多少的問題量?)。Redis主要應用在快取系統(用Redis作為快取儲存資料,提升頁面響應速度)、計數器(Redis在記憶體中對數字進行換算操作非常簡單快捷)、訊息佇列系統(直接提供列表儲存和列表操作)、排行榜(利用有序集合實現排行榜非常簡單)、訂閱釋出、日誌、社交網路、實時系統及Key-Value資料庫,也可以用作訊息回覆、點贊、粉絲、下拉重新整理及過期資料刪除操作