爲何 Redis 爲何如此受歡迎

如今大多數開發人員都會據說過 Redis。Redis 是目前市場上最好的開源內存 NoSQL 數據庫之一。它爲前端以及後端服務(如鍵值查找,隊列,哈希等)提供了很是多的幫助。前端

1、什麼是 Redis?數據庫

根據 Redis 官方介紹,Redis 是一個開源(BSD許可),內存數據結構存儲,用做數據庫,緩存和消息代理,它支持字符串、哈希表、列表、集合、有序集合、位圖、hyperloglogs 等數據類型。後端

2、Redis 與 Memcached緩存

Redis 是一個數據結構服務器。做爲鍵值數據存儲,Redis 相似於 Memcached,但它比 Memcached 有兩個主要優勢:支持更多的數據類型以及持久化。安全

持久化使得你能夠將 Redis 當作合法數據庫進行操做,而不是一個不穩定的臨時緩存。若是從新啓動,Memcached 信息將丟失; 但 Redis 數據仍然存在。服務器

Redis 支持存儲多種類型數據。跟 Memcached 同樣可使用字符串。並且你還能夠處理 hash(哈希),set(全部不一樣值的未排序),zset(全部不一樣值的排序)和 list(可能包括重複的排序)。數據結構

3、Redis 如何運做?性能

數據庫將數據存儲在磁盤或 SSD 上,而 Redis 的數據是駐留在內存中。因爲無需訪問磁盤,Redis 等內存數據存儲避免了查找時間延遲,而且能夠在幾微秒內訪問數據。Redis 提供多種數據結構、高可用性、地理空間、Lua 腳本、事務、磁盤持久性和羣集支持,讓實時互聯網級應用程序的構建變得更加簡單。代理

4、Redis 持久化日誌

如今能夠經過兩種不一樣的方式實現持久性:一種稱爲快照,是一種半持久性模式,指定的時間間隔內生成數據集的時間點快照,以 RDB(Redis DataBase) 轉儲格式編寫。從版本1.1開始,有更安全的替代方案 AOF(Append Only File),它的出現是爲了彌補 RDB 的不足(數據的不一致性),採用日誌的形式來記錄每一個寫操做並追加在文件中。

5、RDB 和 AOF ,我應該用哪個?

通常來講,若是想達到足以媲美 PostgreSQL 的數據安全性, 你應該同時使用 RDB 和 AOF 兩種持久化功能。

AOF 默認狀況下,Redis 每2秒將數據寫入文件系統,根據需求設置時間。若是在默認設置下系統出現故障,則只會丟失幾秒鐘的數據。若是你能夠承受數分鐘之內的數據丟失, 那麼你能夠只使用 RDB 持久化。

有不少人會單獨使用 AOF,可是咱們並不鼓勵這樣,由於時常進行 RDB 快照很是方便於數據庫備份,啓動速度也較之快,還避免了AOF 引擎的 bug。

6、常見案例

緩存 - 因爲其高性能,當讀寫操做量超過傳統數據庫的功能時,能夠經過 Redis 進行解決。因爲 Redis 可以輕鬆的將數據持久保存到磁盤和豐富數據類型,所以它是傳統 Memcached 緩存解決方案的絕佳替代方案。

發佈和訂閱 - 從版本 2.0 開始,Redis 提供了使用發佈/訂閱消息傳遞範例分發數據的功能。

隊列 - 像 Resque 這樣的項目使用 Redis 做爲排隊後臺做業的後端。

遊戲排行榜- Redis 是尋求構建實時排行榜的遊戲開發者的熱門選擇。可直接使用 Redis 有序集數據結構,此結構實現了元素的惟一性,同時又可維護按用戶分數排序的列表。你也可使用時間戳做爲分數,使用有序集處理時間序列數據。

實時分析-Redis 可做爲內存中數據存儲,與流處理平臺(例如 Apache Kafka)搭配使用,以亞毫秒級延遲提取、處理和分析實時數據。Redis 是實時分析使用案例的理想選擇,例如社交媒體分析、廣告投放、個性化。

7、示例 Redis 基本命令

下面我簡單講解 Redis-CLI 基本命令操做,默認狀況下,Redis-CLI在端口 6379 上運行。

SET (設置密鑰)

127.0.0.1:6379> SET foo "Hello World"
OK // 設置密鑰

GET (獲取密鑰)

127.0.0.1:6379> GET foo
"Hello World" // 獲取密鑰

DEL (刪除密鑰)

127.0.0.1:6379> GET foo 
"Hello World" 
127.0.0.1:6379> DEL foo
(integer) 1 // 密鑰剛被刪除
127.0.0.1:6379> GET foo
(nil) // 密鑰被刪除,結果爲nil。

SETEX (設置有效期限的密鑰)

127.0.0.1:6379> SETEX foo 40 "I said, Hello World!"
OK //密鑰已設置爲40秒到期

TTL (密鑰的剩餘時間)

127.0.0.1:6379> TTL foo
(integer) 36 //36秒超時

PERSIST (密鑰刪除期限)

127.0.0.1:6379> PERSIST foo
(integer) 1 //將密鑰轉爲持久化(密鑰不會過時)

RENAME (重命名當前現有密鑰)

127.0.0.1:6379> RENAME foo bar
OK // 將鍵'foo'重命名爲 'bar'

FLUSHALL (清空到目前爲止保存的全部內容)

127.0.0.1:6379> flushall
OK // 刪庫跑路

8、小結

Redis 有着極其豐富的數據類型和極高性能,性能上讀的速度是110000次/s,寫的速度是81000次/s 。可是 Redis 不是萬能的,受到物理內存的限制,不能用做海量數據的高性能讀寫,所以 Redis 適合的場景主要侷限在較小數據量的高性能操做和運算上。

相關文章
相關標籤/搜索