一、Redis介紹
Redis(Remote Dictionary Server)是一款開源的、高性能的鍵值對(Key-Value)存儲數據庫,由 Salvatore Sanfilippo 于 2009 年開發,采用 ANSI C 語言編寫。它以內存存儲為核心,支持數據持久化,同時提供了豐富的數據結構和靈活的功能,廣泛應用于緩存、會話存儲、消息隊列、實時分析等場景。
1.1 Redis 的特點
-
高性能
- 所有數據默認存儲在內存中,讀寫速度極快(單機 QPS 可達 10 萬 +),遠超磁盤數據庫(如 MySQL)。
- 采用單線程模型(避免多線程上下文切換開銷),結合 IO 多路復用機制,高效處理并發請求。
-
豐富的數據結構
支持多種原生數據結構,滿足復雜業務需求:- 字符串(String):最基礎的鍵值類型,可存儲文本、數字或二進制數據(最大 512MB)。
- 哈希(Hash):適合存儲對象(如用戶信息),鍵值對的集合。
- 列表(List):有序字符串集合,支持兩端插入 / 刪除,可實現隊列、棧等結構。
- 集合(Set):無序且唯一的字符串集合,支持交集、并集等運算。
- 有序集合(Sorted Set):類似 Set,但每個元素關聯一個分數(Score),可按分數排序(如排行榜)。
- 其他:BitMap(位圖)、HyperLogLog(基數統計)、Geospatial(地理位置)等。
-
數據持久化
雖然數據存儲在內存中,但 Redis 提供兩種持久化方式,避免宕機后數據丟失:- RDB(Redis Database):定期將內存中的數據快照寫入磁盤(二進制文件),適合備份和災難恢復。
- AOF(Append Only File):記錄所有寫操作到日志文件,重啟時重新執行日志恢復數據,可靠性更高(可配置刷盤策略)。
-
高可用與擴展性
- 主從復制(Master-Slave):主節點寫入數據,從節點同步并提供讀服務,實現讀寫分離和故障備份。
- 哨兵模式(Sentinel):監控主從節點狀態,當主節點故障時自動將從節點升級為主節點,保證高可用。
- 集群模式(Cluster):將數據分片存儲在多個節點,支持橫向擴展(最多 16384 個節點),解決單機內存和性能瓶頸。
-
原子操作與事務
- 所有單個命令都是原子性的,支持通過
MULTI
、EXEC
等命令實現簡單事務(批量執行命令,要么全成功,要么全失敗)。 - 提供
WATCH
命令實現樂觀鎖,用于并發場景下的數據一致性控制。
- 所有單個命令都是原子性的,支持通過
-
其他特性
- 過期鍵刪除:支持為鍵設置過期時間,自動刪除過期數據(基于惰性刪除 + 定期刪除策略)。
- 發布訂閱(Pub/Sub):實現簡單的消息隊列功能,支持消息的發布與訂閱。
- Lua 腳本:支持嵌入 Lua 腳本執行,實現復雜邏輯的原子性操作。
- 跨平臺:可在 Linux、Windows、macOS 等系統運行,且客戶端語言豐富(Java、Python、Go 等均有成熟庫)。
1.2 Redis應用場景
- 緩存:存儲熱點數據(如商品信息、用戶會話),減少數據庫訪問壓力,提升讀性能。
- 會話存儲:替代傳統的 Cookie 或服務器本地會話,實現分布式系統中的會話共享。
- 計數器與排行榜:利用
INCR
命令實現點贊數、訪問量統計,通過Sorted Set
實現實時排行榜。 - 消息隊列:基于
List
的LPUSH
/RPOP
或 Pub/Sub 實現簡單的消息傳遞。 - 分布式鎖:通過
SETNX
(SET if Not Exists)命令實現分布式環境下的資源競爭控制。 - 地理位置服務:利用
GEO
系列命令實現附近的人、距離計算等功能。
二、配置Redis
這里介紹在Ubuntu
下載并配置Redis
2.1 下載Redis
到Redis
官網下載,這里選擇下載7.0.5
版本:http://download.redis.io/releases/redis-7.0.5.tar.gz
下載完成后解壓到當前目錄下:
tar -zxvf redis-7.05.tar.gz
進入到對應的解壓后的文件夾下,里面有Makefile
文件
cd redis-7.05
2.2 編譯Redis
在Makefile
文件路徑下執行make
進行編譯,編譯完成后使用make install
安裝到默認路徑下
make -j4 && sudo make install
Redis
默認安裝到/usr/local/bin
目錄下,安裝后有redis-server
服務器和redis-cli
客戶端
ls /usr/local/bin | grep redis
2.3 設置配置文件
啟動Redis
的時候需要指定配置文件,我們這里創建一個配置文件的目錄,用于存放Redis
的配置文件
cd /usr/local/bin
sudo mkdir redisconf
實際上,剛剛解壓的文件夾中存在默認的Redis
配置,即redis.conf
文件,我們將它拷貝到我們的文件夾中
sudo cp ~/redis-7.0.5/redis.conf ./redisconf/
下面是常見的Redis
配置,如有需要可以修改配置文件
# 允許訪問的地址,默認是127.0.0.1,會導致只能在本地訪問。修改為0.0.0.0則可以在任意IP訪問,生產環境不要設置為0.0.0.0
bind 0.0.0.0
# 守護進程,修改為yes后即可后臺運行
daemonize yes
# 密碼,設置后訪問Redis必須輸入密碼
requirepass 123456
# 監聽的端口
port 6379
# 工作目錄,默認是當前目錄,也就是運行redis-server時的命令,日志、持久化等文件會保存在這個目錄
dir .
# 數據庫數量,設置為1,代表只使用1個庫,默認有16個庫,編號0~15
databases 1
# 設置redis能夠使用的最大內存
maxmemory 512mb
# 日志文件,默認為空,不記錄日志,可以指定日志文件名
logfile "redis.log"
2.4 啟動Redis
啟動Redis
服務器,指定我們的配置文件,啟動完成后的服務器輸出如下:
redis-server /usr/local/bin/redisconf/redis.conf
啟動客戶端,這里我們可以使用-p
指定端口,如果不指定,就使用默認的端口6379
redis-cli -p 6379
查看進程信息,確保啟動了Redis
ps -aux | grep redis
2.5 測試Redis
在Redis
客戶端redis-cli
輸入info
,查看對應的Redis
信息
info
更多資料:https://github.com/0voice