初識Redis

初識Redis

NoSQL是什麼?

數據庫: 用來存儲數據的倉庫

NoSQL: 不僅僅是SQL,是許多非關係型數據庫的統稱,但本質上還是存儲數據的倉庫

為什麼需要NoSQL?

  1. 解決了高併發的讀寫問題
  2. 解決了海量數據的高效率存儲和訪問問題
  3. 實現了高可用性及高可擴展性

Redis是什麼?

是由C語言開發的一款開源的、高性能的鍵值對存儲數據庫。

它支持多種鍵值數據類型。包括字符串、列表、集合、散列、有序集合等。它內置複製、Lua腳本、LRU收回、事務及不同級別磁盤持久化功能,同時通過Redis Sentinel實現高可用,Redis Cluster提供自動分區等相關功能。

Redis的特性

  1. 支持多種語言。c、java、c++等
  2. 豐富的數據類型
  3. 多種數據結構,如哈希、集合、位圖(多用於活躍用戶數等統計)、HyperLogLog(超小內存唯一值計數,由於只有12kb,因而有誤差)、GEO(地理位置信息)
  4. 讀寫速度快,性能高。官方給出的數據是:Redis 能讀的速度是 110 000 次/s,寫的速度是 81 000 次/s。之所以有這麼快的讀/寫速度,是因為這些數據都存儲在內存中。
  5. 支持持久化。Redis 的持久化也就是備份數據,它每隔一段時間就將內存中的數據保存在磁盤中,在重啟的時候會再次加載到內存中,從而實現數據持久化。Redis 的持久化方式是 RDB 和 AOF。
  6. 簡單且功能強大。如利用 Redis 可以實現消息訂閱發佈、Lua 腳本、數據庫事務、Pipeline(管道,即當指令達到一定數量後,客戶端才會執行)。同時 Redis 是單線程的,它不依賴外部庫,它的所有操作都是原子性的,使用簡單。
  7. 實現高可用主從複製,主節點做數據副本。
  8. 實現分佈式集群和高可用。Redis Cluster 支持分佈式,進而可以實現分佈式集群;Redis Sentinel 支持高可用。

Redis的使用場景

  1. 做緩存。這是 Redis 使用最多的場景。Redis 能夠替代 Memcached。比如,實現數據查詢、緩存新聞消息內容、緩存商品內容或購物車等。
  2. 做計數器應用。Redis 的命令具有原子性,它提供了 INCR、DECR、GETSET、INCRBY 等相關命令來構建計數器系統。可以使用 Redis 來記錄一個熱門帖子的轉發數、評論數。通過 Redis 的原子遞增,可以實現在任何時候封鎖一個 IP 地址等。
  3. 實現消息隊列系統。Redis 運行穩定,速度快,支持模式匹配,也可以實現消息訂閱發佈。Redis 還有阻塞隊列的命令,能夠讓一個程序在執行時被另一個程序添加到隊列中。比如,實現秒殺、搶購等。
  4. 做實時系統、消息系統。可以利用 Redis 的 set 功能做實時系統,來查看某個用戶是否進行了某項操作,對其行為進行統計對比。也可以利用 Redis 的 Pub/Sub 構建消息系統,如在線聊天系統。
  5. 現排行榜應用。排行榜的實現利用了 Redis 的有序集合。比如,對上百萬個用戶的排名,採用其他數據庫來實現是非常困難的,而利用 Redis 的 ZADD、ZREVRANGE、ZRANK 等命令可以輕鬆實現排名並獲取排名的用戶。
  6. 做數據過期處理。我們可以將 sorted set 的 score 值設置成過期時間的時間戳,然後通過過期時間排序,找出過期的數據進行刪除。可以採用過期屬性來確認一個關鍵字在什麼時候應該被刪除。也可以利用 UNIX 時間作為關鍵字,將列表按時間排序。對 currenttime 和 timeto_live 進行檢索,查詢出過期的數據,進而刪除。
  7. 布式集群架構中的 session 分離。採用分佈式集群部署,可以滿足一個 Web 應用系統被大規模訪問的需要。而要實現分佈式集群部署,就要解決 session 統一的問題。通常可以採用 Redis 來實現 session 共享機制,以達到 session 統一的目的。


分享到:


相關文章: