Redis 簡介
Redis 是什么
Redis是一種基於鍵值對(key-value)的 NoSQL 數據庫。
Redis 的特點
速度極快
- Redis 的所有數據都是存放在內存中,這是 Redis 速度快的最主要原因
- Redis 是用 C 語言實現的,一般來說 C 語言實現的程序“距離”操作系統更近,執行速度相對會更快
- Redis 使用了單線程架構,預防了多線程可能產生的線程切換和競爭問題
數據類型豐富
與很多鍵值對數據庫不同的是,Redis中的值不僅可以是字符串,而且還可以是具體的數據結構,它主要提供了5種數據結構:字符串、哈希、列表、集合、有序集合。這樣不僅能便於在許多應用場景的開發,同時也能夠提高開發效率。
簡單穩定
- Redis 的源碼很少
- Redis 使用單線程模型,這樣不僅使得 Redis 服務端處理模型變得簡單,而且也使得客戶端開發變得簡單
- Redis 不需要依賴於操作系統中的類庫,Redis 自己實現了事件處理的相關功能,應用更加穩定
支持持久化
通常看,將數據放在內存中是不安全的,一旦發生斷電或者機器故障,重要的數據可能就會丟失,因此 Redis 提供了兩種持久化方式:RDB 和 AOF,即可以用兩種策略將內存的數據保存到硬盤中,這樣就保證了數據的可持久性。
主從復制
Redis 提供了復制功能,實現了多個相同數據的 Redis 副本
高可用和分布式
Redis 從 2.8 版本提供了高可用實現 Redis Sentinel(哨兵模式),它能夠保證 Redis 節點的故障發現和故障自動轉移。
Redis 從 3.0 版本提供了分布式實現 Redis Cluster(集群模式),它是 Redis 真正的分布式實現,提供了高可用、讀寫和容量的擴展性。
Redis 的應用場景
數據緩存(最多使用)
緩存的兩種形式:
頁面緩存:第一次從數據庫中讀取,然后生成一個靜態頁面,以后所有的讀取,只加載這個靜態頁面就可以了
數據緩存:由於一個頁面有幾種需要從不同的緩存中讀取數據的模塊,所以不適合使用頁面緩存。
為了提高用戶的請求速度和降低服務器的負載,降低數據庫的讀寫次數,將一些在短時間之內不會發生變化且被頻繁訪問熱點數據,存放就到緩存中,其性能優於 Memcached。 (類似於 MyBatis 的緩存機制)
熱點數據:數據庫中數據被訪問的頻率是不均勻的,頻繁被訪問的數據稱為熱點數據((Hot Spot Data)
排行榜系統
Redis 提供了列表和有序集合數據結構,合理地使用這些數據結構可以很方便地構建各種排行榜系統。
計數器應用
利用 Redis 的原子性,可以輕松地使用 Redis INCR(自增) 和 DECR(自減) 命令來構建計數系統,關鍵是不用擔心數據庫的並發性問題,一般用於網站訪問統計
數據過期處理
利用 Redis 支持的過期時間特性,可以定時清除過期數據,如定期活動(精確到毫秒)
消息隊列系統
消息隊列系統可以說是一個大型網站的必備基礎組件,因為其具有業務解耦、非實時業務削峰等特性。
Redis 提供了發布訂閱功能和阻塞隊列的功能,雖然和專業的消息隊列比還不夠足夠強大,但是對於一般的消息隊列功能基本可以滿足,如秒殺、搶購、12306 等。
社交網絡
贊/踩、粉絲、共同好友/喜好、推送、下拉刷新等是社交網站的必備功能,由於社交網站訪問量通常比較大,而且傳統的關系型數據不太適合保存這種類型的數據,Redis 提供的數據結構可以相對比較容易地實現這些功能,如新浪博客大量使用 Redis 存儲數據和實現博客功能。