一.概述 Redis 是一個開源(BSD許可)的,記憶體中的數據結構存儲系統,它可以用作資料庫、緩存和消息中間件。 它支持多種類型的數據結構,如 字元串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 與範圍查詢, bitmap ...
一.概述
Redis 是一個開源(BSD許可)的,記憶體中的數據結構存儲系統,它可以用作資料庫、緩存和消息中間件。 它支持多種類型的數據結構,如 字元串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 與範圍查詢, bitmaps, hyperloglogs 和 地理空間(geospatial) 索引半徑查詢。 Redis 內置了 複製(replication),LUA腳本(Lua scripting), LRU驅動事件(LRU eviction),事務(transactions) 和不同級別的 磁碟持久化(persistence), 並通過 Redis哨兵(Sentinel)和自動 分區(Cluster)提供高可用性(high availability)。
Redis是用ANSI C編寫的,適用於大多數POSIX系統,如Linux,* BSD,OS X,沒有外部依賴性。Linux和OS X是Redis開發和測試的兩個操作系統,我們建議使用Linux進行部署。Redis可能在Solaris衍生系統(如SmartOS)中工作,但支持是最好的努力。Windows版本沒有官方支持,但Microsoft開發並維護了Redis的Win-64埠。
二. Redis 優勢
1. 性能極高 – Redis能讀的速度是110000次/s,寫的速度是81000次/s 。
2.豐富的數據類型 – Redis支持二進位案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 數據類型操作。
3.原子 – Redis的所有操作都是原子性的,同時Redis還支持對幾個操作全並後的原子性執行。
4.豐富的特性 – Redis還支持 publish/subscribe, 通知, key 過期等等特性。
三. Redis的主要知識點
在後繼學習Redis 資料庫時,先瞭解主要的知識點,後面學習時,下麵的知識點序號不分先後,往後再補上其它知識點,以最簡短的文字概括描述。
1. 數據結構與對象 data structures
Redis資料庫裡面的每個鍵值對 (key-value pair) 都是由對象(object) 組成的,其中資料庫鍵總是一個字元串對象(string object)。 而資料庫鍵的值可以是字元串對象,列表對象(list object), 哈希對象(hash object)也叫散列, 集合對象(set object), 有序集合對象(stoted set object) 五種以及3.0版本之上的其它結構對象。
2. 複製Replication
在 Redis 複製的基礎上,使用和配置主從複製非常簡單,能使得從 Redis 伺服器(下文稱 slave)能精確得複製主 Redis 伺服器(下文稱 master)的內容。每次當 slave 和 master 之間的連接斷開時, slave 會自動重連到 master 上,並且無論這期間 master 發生了什麼, slave 都將嘗試讓自身成為 master 的精確副本。
3. 持久化disk persistence
Redis 提供了不同級別的持久化方式包括:講述RDB持久化和 AOF持久化。(1) RDB持久化方式能夠在指定的時間間隔能對你的數據進行快照存儲. (2) AOF持久化方式記錄每次對伺服器寫的操作,當伺服器重啟的時候會重新執行這些命令來恢複原始的數據,AOF命令以redis協議追加保存每次寫的操作到文件末尾。Redis還能對AOF文件進行後臺重寫,使得AOF文件的體積不至於過大。
4. LUA腳本
Redis 從2.6.0 版本開始對Lua腳本的支持,通過在伺服器中嵌入Lua 環境, Redis 客戶端可以使用Lua腳本。命令包括:EVAL 和 EVALSHA, 可以對Lua腳本進行求值。
5. 驅動事件LRU eviction
redis 伺服器是一個事件驅動程式, 伺服器需要處理兩類事件包括:文件事件和時間事件。當Redis被當做緩存來使用,當你新增數據時,讓它自動地回收舊數據是件很方便的事情。這個行為在開發者社區非常有名,因為它是流行的memcached系統的預設行為。
6. 事務 transcation
redis 通過MULTI 、 EXEC 、 DISCARD 和 WATCH等命令來實現事務功能, 事務提供了一種將多個命令請求打包,然後一次性,按順序的執行多個命令的機制,並且在事務執行期間,伺服器不會中斷事務而改去執行其它客戶端的命令請求,它會將事務中的所有命令都執行完畢,然後才去處理其它客戶端的命令請求。
7. 哨兵Sentinel
Sentinel 是redis 高可用的解決方案,由一個或多個Sentinel 實例(instance)組成的Sentinel 系統(system) 可以監視任意多個主伺服器,以及這些主伺服器下的所有從伺服器。該系統執行以下三個任務包括:監控,提醒,自動故障遷移。
8. 集群Cluster
Redis 集群是Redis 提供分散式資料庫方案,集群通過分片(sharding)來進行數據共用,並提供複製和故障轉移功能。
9. 發佈與訂閱
Redis的發佈與訂閱功能由SUBSCRIBE,PUBLISH, psubscribe等命令組成,通過執行SUBSCRIBE命令,客戶端可以訂閱一個或多個頻道,從而成為這些頻道的訂閱者(subscriber)。 每當有其它客戶端向被訂閱的頻道發送消息(message)時,頻道的所有訂閱者都會收到這條消息。
後面學習參考了書籍:”redis設計與實現“ 以及查看Redis官網:http://www.redis.cn/