天天看點

資料庫必知詞彙:Redis

Redis(全稱:Remote Dictionary Server 遠端字典服務)是一個開源的使用ANSI C語言編寫、支援網絡、可基于記憶體亦可持久化的日志型、Key-Value資料庫,并提供多種語言的API。

Redis和Memcached類似,它支援存儲的Value類型相對更多,包括string(字元串)、list(連結清單)、set(集合)、zset(sorted set --有序集合)和hash(哈希類型)。這些資料類型都支援push/pop、add/remove及取交集并集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎上,Redis支援各種不同方式的排序。與Memcached一樣,為了保證效率,資料都是緩存在記憶體中。差別的是Redis會周期性的把更新的資料寫入磁盤或者把修改操作寫入追加的記錄檔案,并且在此基礎上實作了Master-Slave(主從)同步。

Redis 是一個高性能的Key-Value資料庫。Redis的出現,很大程度補償了memcached這類key/value存儲的不足,在部分場合可以對關系資料庫起到很好的補充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等用戶端,使用很友善。

Redis支援主從同步。資料可以從主伺服器向任意數量的從伺服器上同步,從伺服器可以是關聯其他從伺服器的主伺服器。這使得Redis可執行單層樹複制。存盤可以有意無意的對資料進行寫操作。由于完全實作了釋出/訂閱機制,使得從資料庫在任何地方同步樹時,可訂閱一個頻道并接收主伺服器完整的消息釋出記錄。同步對讀取操作的可擴充性和資料備援很有幫助。

Redis的外圍由一個鍵、值映射的字典構成。與其他非關系型資料庫主要不同在于:Redis中值的類不僅限于字元串,還支援如下抽象資料類型:

  • 字元串清單
  • 無序不重複的字元串集合
  • 有序不重複的字元串集合
  • 鍵、值都為字元串的哈希表

值的類型決定了值本身支援的操作。Redis支援不同無序、有序的清單,無序、有序的集合間的交集、并集等進階伺服器端原子操作。

Redis與其他Key-Value資料庫的不同在于以下兩點:

  • Redis有着更為複雜的資料結構并且提供對他們的原子性操作,這是一個不同于其他資料庫的進化路徑。Redis的資料類型都是基于基本資料結構的同時對程式員透明,無需進行額外的抽象。
  • Redis運作在記憶體中但是可以持久化到磁盤,是以在對不同資料集進行高速讀寫時需要權衡記憶體,因為資料量不能大于硬體記憶體。在記憶體資料庫方面的另一個優點是,相比在磁盤上相同的複雜的資料結構,在記憶體中操作起來非常簡單,這樣Redis可以做很多内部複雜性很強的事情。同時,在磁盤格式方面他們是緊湊的以追加的方式産生的,因為他們并不需要進行随機通路。

資料來源:

超高性能 key-value 資料庫 Redis

https://www.oschina.net/p/redis

Redis 簡介

https://www.runoob.com/redis/redis-intro.html

Redis

https://redis.io/