Redis 全稱 Remote Dictionary Server(即遠程字典服務),它是一個基於內存實現的鍵值型非關係(NoSQL)數據庫,由意大利人 Salvatore Sanfilippo 使用 C 語言編寫。
Redis 遵守 BSD 協議,實現了免費開源,其最新版本是 6.20,常用版本包括 3.0 、4.0、5.0。自 Redis 誕生以來,它以其超高的性能、完美的文檔和簡潔易懂的源碼廣受好評,國內外很多大型互聯網公司都在使用 Redis,比如騰訊、阿里、Twitter、Github 等等。
圖1:Redis圖標
提示:Redis官網(https://redis.io/)提供了完善的社區環境、文檔説明,以及更新支持。
常見的內存型數據庫,除 Redis 之外,還有 Oracle Berkeley DB(甲骨文旗下的一款產品)、SQlite(輕量級內存數據庫)、Memcache(鍵值型分佈式緩存數據庫)、Altibase(基於內存的高性能數據庫)。
與其他內存型數據庫相比,Redis 具有以下特點:
- Redis 不僅可以將數據完全保存在內存中,還可以通過磁盤實現數據的持久存儲;
- Redis 支持豐富的數據類型,包括 string、list、set、zset、hash 等多種數據類型,因此它也被稱為“數據結構服務器”;
- Redis 支持主從同步,即 master-slave 主從複製模式。數據可以從主服務器向任意數量的從服務器上同步,有效地保證數據的安全性;
- Redis 支持多種編程語言,包括 C、C++、Python、Java、PHP、Ruby、Lua 等語言。
與 SQL 型數據庫截然不同,Redis 沒有提供新建數據庫的操作,因為它自帶了 16 (0—15)個數據庫(默認使用 0 庫)。在同一個庫中,key 是唯一存在的、不允許重複的,它就像一把“密鑰”,只能打開一把“鎖”。鍵值存儲的本質就是使用 key 來標識 value,當想要檢索 value 時,必須使用與 value 相對應的 key 進行查找。
Redis 數據庫沒有“表”的概念,它通過不同的數據類型來實現存儲數據的需求,不同的數據類型能夠適應不同的應用場景,從而滿足開發者的需求。
Redis架構
Redis體系架構主要分為兩個部分:
- Redis服務端
- Redis客户端
客户端和服務端可以位於同一台計算機上,也可以位於不同的計算機上。服務端是整個架構的“大腦”,能夠把數據存儲到內存中,並且起到管理數據的作用。
Redis優勢
下面對 Redis 的優勢進行了簡單總結:
- 性能極高:Redis 基於內存實現數據存儲,它的讀取速度是 110000次/s,寫速度是 81000次/s;
- 多用途工具: Redis 有很多的用途,比如可以用作緩存、消息隊列、搭建 Redis 集羣等;
- 命令提示功能:Redis 客户端擁有強大的命令提示功能,使用起來非常的方便,降低了學習門檻;
- 可移植性:Redis 使用用標準 C語言編寫的,能夠在大多數操作系統上運行,比如 Linux,Mac,Solaris 等。
Redis應用場景
Redis 用來緩存一些經常被訪問的熱點數據、或者需要耗費大量資源的內容,通過把這些內容放到 Redis 中,可以讓應用程序快速地讀取它們。例如,網站的首頁需要經常被訪問,並且在創建首頁的過程中會消耗的較多的資源,此時就可以使用 Redis 將整個首頁緩存起來,從而降低網站的壓力,減少頁面訪問的延遲時間。
我們知道,數據庫的存儲方式大體可分為兩大類,基於磁盤存儲和基於內存存儲。磁盤存儲的數據庫,因為磁頭機械運動以及系統調用等因素導致讀寫效率較低。Redis 基於內存來實現數據存取,相對於磁盤來説,其讀寫速度要高出好幾個數量級。下表將 Redis 數據庫與其他常用數據庫做了簡單對比:
Redis與其他數據庫對比
|
名稱
|
類型
|
數據存儲選項
|
附加功能
|
|
Redis
|
基於內存存儲的鍵值非關係型數據庫
|
字符串、列表、散列、有序集合、無序集合
|
發佈與訂閲、主從複製、持久化存儲等
|
|
Memcached
|
基於內存存儲的鍵值緩存型數據庫
|
鍵值之間的映射
|
為提升性能構建了多線程服務器
|
|
MySQL |
基於磁盤的關係型數據庫
|
每個數據庫可以包含多個表,每個表可以包含多條記錄;
支持第三方擴展。
|
支持 ACID 性質、主從複製和主主複製
|
|
MongoDB
|
基於磁盤存儲的非關係文檔型數據庫
|
每個數據庫可以包含多個集合,每個集合可以插入多個文檔
|
支持聚合操作、主從複製、分片和空間索引
|
Redis 基於內存來實現數據的存儲,因此其速度非常快。但是我們知道,計算機的內存是非常珍貴的資源,所以 Redis 不適合存儲較大的文件或者二進制數據,否則會出現錯誤,Redis 適合存儲較小的文本信息。理論上 Redis 的每個 key、value 的大小不超過 512 MB。
總得來説,上述數據庫各有優勢,當我們選用數據庫時,也要因地制宜,選擇一款與業務場景最相符合的數據庫。