Redis是一個開源的使用ANSI C語言編寫、基於記憶體亦可持久化的日誌型、Key-Value資料庫,並提供了對多種編程語言的支持。 Redis的外圍由一個鍵、值映射的字典構成,Redis提供五種數據類型:string,hash,list,set及zset(sorted set),所以Redis也被 ...
Redis是一個開源的使用ANSI C語言編寫、基於記憶體亦可持久化的日誌型、Key-Value資料庫,並提供了對多種編程語言的支持。
Redis的外圍由一個鍵、值映射的字典構成,Redis提供五種數據類型:string,hash,list,set及zset(sorted set),所以Redis也被稱為數據結構伺服器。
redis是一個key-value存儲系統。支持存儲的value類型包括string(字元串)、list(鏈表)、set(集合)、zset(sorted set --有序集合)和hash(哈希)。這些數據類型都支持push/pop、add/remove及取交集並集和差集等操作,且Redis支持各種不同方式的排序。為了保證效率,數據都是緩存在記憶體中。redis會周期性的把更新的數據寫入磁碟或者把修改操作寫入追加的記錄文件,並且在此基礎上實現了master-slave(主從)同步。
Redis支持主從同步。數據可以從主伺服器向任意數量的從伺服器上同步,從伺服器可以是關聯其他從伺服器的主伺服器。這使得Redis可執行單層樹複製。存檔可以有意無意的對數據進行寫操作。由於完全實現了發佈/訂閱機制,使得從資料庫在任何地方同步樹時,可訂閱一個頻道並接收主伺服器完整的消息發佈記錄。
Redis的特點
-
Redis支持數據的持久化,可以將記憶體中的數據保存在磁碟中,重啟的時候可以再次載入進行使用。
- Redis是完全在記憶體中保存數據的資料庫,使用磁碟只是為了持久化。
-
Redis不僅僅支持簡單的key-value類型的數據,同時還提供list,set,zset,hash等數據結構的存儲。
-
Redis支持數據的備份,即master-slave模式的數據備份。
Redis 優勢
-
性能極高 – Redis 是一個高性能的key-value資料庫,讀的速度能達到110000次/s,寫的速度能達到81000次/s 。
-
相比於許多鍵值數據存儲系統,Redis有豐富的數據類型 – Redis支持string,hash,list,set及zset(sorted set)等數據類型。
-
原子性 – Redis的所有操作都是原子性的,要麼成功執行要麼失敗完全不執行。單個操作是原子性的。多個操作也支持事務,即原子性,通過MULTI和EXEC指令包起來。
-
豐富的特性 – Redis支持 publish/subscribe, 通知, key 過期等特性
redis使用了兩種文件格式:
- 全量數據格式:把記憶體中的數據寫入磁碟,便於下次讀取文件進行載入
- 增量請求文件:把記憶體中的數據序列化為操作請求,用於讀取文件進行replay得到數據,序列化的操作包括SET、RPUSH、SADD、ZADD。
redis的存儲分為記憶體存儲、磁碟存儲和log文件三部分,配置文件中有三個參數對其進行配置。
-
save seconds updates:save配置,指出在多長時間內,有多少次更新操作,就將數據同步到數據文件。
-
appendonly yes/no :appendonly配置,指出是否在每次更新操作後進行日誌記錄,如果不開啟,可能會在斷電時導致一段時間內的數據丟失。因為redis本身同步數據文件是按上面的save條件來同步的,所以有的數據會在一段時間內只存在於記憶體中。
-
appendfsync no/always/everysec :appendfsync配置,no表示等操作系統進行數據緩存同步到磁碟,always表示每次更新操作後手動調用fsync()將數據寫到磁碟,everysec表示每秒同步一次。
Redis運行在記憶體中但可持久化到磁碟,在對不同數據集進行高速讀寫時需要權衡記憶體,因為數據量不能大於硬體記憶體。記憶體資料庫的一個優點是,相比在磁碟上相同的複雜的數據結構,在記憶體中操作起來非常簡單,可以做很多內部複雜性很強的事情。