初識Redis
NoSQL是什么?
資料庫: 用來存盤資料的倉庫
NoSQL: 不僅僅是SQL,是許多非關系型資料庫的統稱,但本質上還是存盤資料的倉庫
為什么需要NoSQL?
- 解決了高并發的讀寫問題
- 解決了海量資料的高效率存盤和訪問問題
- 實作了高可用性及高可擴展性
Redis是什么?
是由C語言開發的一款開源的、高性能的鍵值對存盤資料庫,
它支持多種鍵值資料型別,包括字串、串列、集合、散列、有序集合等,它內置復制、Lua腳本、LRU識訓、事務及不同級別磁盤持久化功能,同時通過Redis Sentinel實作高可用,Redis Cluster提供自動磁區等相關功能,
Redis的特性
- 支持多種語言,c、java、c++等
- 豐富的資料型別
- 多種資料結構,如哈希、集合、位圖(多用于活躍用戶數等統計)、HyperLogLog(超小記憶體唯一值計數,由于只有12kb,因而有誤差)、GEO(地理位置資訊)
- 讀寫速度快,性能高,官方給出的資料是:Redis 能讀的速度是 110 000 次/s,寫的速度是 81 000 次/s,之所以有這么快的讀/寫速度,是因為這些資料都存盤在記憶體中,
- 支持持久化,Redis 的持久化也就是備份資料,它每隔一段時間就將記憶體中的資料保存在磁盤中,在重啟的時候會再次加載到記憶體中,從而實作資料持久化,Redis 的持久化方式是 RDB 和 AOF,
- 簡單且功能強大,如利用 Redis 可以實作訊息訂閱發布、Lua 腳本、資料庫事務、Pipeline(管道,即當指令達到一定數量后,客戶端才會執行),同時 Redis 是單執行緒的,它不依賴外部庫,它的所有操作都是原子性的,使用簡單,
- 實作高可用主從復制,主節點做資料副本,
- 實作分布式集群和高可用,Redis Cluster 支持分布式,進而可以實作分布式集群;Redis Sentinel 支持高可用,
Redis的使用場景
- 做快取,這是 Redis 使用最多的場景,Redis 能夠替代 Memcached,比如,實作資料查詢、快取新聞訊息內容、快取商品內容或購物車等,
- 做計數器應用,Redis 的命令具有原子性,它提供了 INCR、DECR、GETSET、INCRBY 等相關命令來構建計數器系統,可以使用 Redis 來記錄一個熱門帖子的轉發數、評論數,通過 Redis 的原子遞增,可以實作在任何時候封鎖一個 IP 地址等,
- 實作訊息佇列系統,Redis 運行穩定,速度快,支持模式匹配,也可以實作訊息訂閱發布,Redis 還有阻塞佇列的命令,能夠讓一個程式在執行時被另一個程式添加到佇列中,比如,實作秒殺、搶購等,
- 做實時系統、訊息系統,可以利用 Redis 的 set 功能做實時系統,來查看某個用戶是否進行了某項操作,對其行為進行統計對比,也可以利用 Redis 的 Pub/Sub 構建訊息系統,如在線聊天系統,
- 現排行榜應用,排行榜的實作利用了 Redis 的有序集合,比如,對上百萬個用戶的排名,采用其他資料庫來實作是非常困難的,而利用 Redis 的 ZADD、ZREVRANGE、ZRANK 等命令可以輕松實作排名并獲取排名的用戶,
- 做資料過期處理,我們可以將 sorted set 的 score 值設定成過期時間的時間戳,然后通過過期時間排序,找出過期的資料進行洗掉,可以采用過期屬性來確認一個關鍵字在什么時候應該被洗掉,也可以利用 UNIX 時間作為關鍵字,將串列按時間排序,對 currenttime 和 timeto_live 進行檢索,查詢出過期的資料,進而洗掉,
- 布式集群架構中的 session 分離,采用分布式集群部署,可以滿足一個 Web 應用系統被大規模訪問的需要,而要實作分布式集群部署,就要解決 session 統一的問題,通常可以采用 Redis 來實作 session 共享機制,以達到 session 統一的目的,
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/12706.html
標籤:NoSQL
