1. Redis特性
1)In-memory data structures
Redis 在內存中存儲數據,key 是 String, value 可以是 hash, list, set, sorted set, stream ...
MySQL主要是通過 “表” 的方式來存儲組織數據的 “關系型數據庫”
Redis主要是通過 “鍵值對” 的方式來存儲組織數據的 “非關系數據庫”
2)Programmability
針對 Redis 的操作,可以直接通過簡單的交互式命令進行操作
也可以通過一些腳本的方式,批量執行一些操作(可以帶有一些邏輯)
3)Extensibility
可以在 Redis 原有的功能基礎上再進行擴展,Redis 也提供了一組 API
4)Persistence
持久化 —— Redis 把數據存儲在內存上
內存中存儲的數據是易失的,進程退出/程序重啟 都會丟失
可以把 Redis 中的數據存儲在硬盤上,相當于備份。當程序重啟時,會加載硬盤中的數據,是 Redis 的內存恢復到重啟前的狀態
5)Clustering
Redis 作為一個分布式系統中的插件,能支持集群(類似于水平擴展,“分庫分表”)
一個 Redis 能存儲的數據是有限的(內存空間有限)
引入多臺主機,部署多個 Redis 節點,每個 Redis 存儲數據的一部分
6)High availability
高可用 —— 備份/冗余
Redis 自身支持 “主從” 結構,從節點相當于是主節點的備份
2. Redis 應用場景
1)緩存
2)排行榜
Redis 提供了列表和有序集合的結構,合理地使用這些數據結構可以很方便地構建各種排行榜系統
3)計數器
4)社交網絡
5)消息隊列
3. Redis 運行快的原因探討
1)Redis 數據存儲在內存中,比訪問硬盤的數據庫要快很多
2)Redis 核心功能都是比簡單的邏輯(比較簡單的操作內存的數據結構)
3)從網絡的角度上,Redis 使用 IO 多路復用的方式(epoll),使用一個線程管理多個 socket
4)Redis 使用的是單線程模型(高版本引入多線程),單線程減少了不必要的線程之間的競爭開銷(Redis 的核心業務,主要是操作內存的數據結構,不會很消耗CPU)
多線程提高效率的前提是,CPU密集型任務
使用多個線程可以充分利用CPU多核資源