概述
Redis官網:https://redis.io/
Redis 是完全開源免費的,遵守BSD協議,是一個高性能(NOSQL)的key-value數據庫,Redis是一個開源的使用ANSI C語言編寫、支持網絡、可基於內存亦可持久化的日誌型、Key-Value數據庫,並提供多種語言的API。
什麼是BSD協議?
BSD是"Berkeley Software Distribution"的縮寫,意思是"伯克利軟件發行版"。
BSD開源協議是一個給於使用者很大自由的協議。可以自由的使用,修改源代碼,也可以將修改後的代碼作為開源或者專有軟件再發布。BSD代碼鼓勵代碼共享,但需要尊重代碼作者的著作權。
BSD由於允許使用者修改和重新發布代碼,也允許使用或在BSD代碼上開發商業軟件發佈和銷售,因此是對商業集成很友好的協議。
redis在4.0之前一直是單線程,在4.0之後引入了多線程,但是處理讀寫請求的線程也就只有一個。
Redis特點
-
性能極高 – 由於數據是存儲在內存中(Redis能讀的速度是110000次/s,寫的速度是81000次/s )。
-
豐富的數據類型 – Redis支持的類型 String, Hash,List, Set 及 Ordered Set 等數據類型操作。
-
原子性 – Redis的所有操作都是原子性的,意思就是要麼成功執行要麼失敗完全不執行。單個操作是原子性的。多個操作也支持事務,即原子性,通過MULTI和EXEC指令包起來。
-
豐富的特性 – Redis還支持 publish/subscribe, 通知, key 過期等等特性。
-
高速讀寫,redis使用自己實現的分離器,代碼量很短,沒有使用lock(MySQL),因此效率非常高。
Redis是一個簡單的,高效的,分佈式的,基於內存的緩存工具。
架設好服務器後,通過網絡連接(類似數據庫),提供Key-Value式緩存服務。
簡單,是Redis突出的特色。
簡單可以保證核心功能的穩定和優異。
Redis應用場景
Redis可以用作數據庫、緩存、秒殺、計數器、排行榜、熱點數據(經常會被查詢,但是不經常被修改或者刪除的數據)、分佈式鎖、分佈式ID、和消息中間件等大部分功能等性能密切相關場景裏。
-
緩存
緩存現在幾乎是所有中大型網站都在用的必殺技,合理的利用緩存不僅能夠提升網站訪問速度,還能大大降低數據庫的 壓力。Redis提供了鍵過期功能,也提供了靈活的鍵淘汰策略,所以,現在Redis用在緩存的場合非常多。
-
緩存
緩存現在幾乎是所有中大型網站都在用的必殺技,合理的利用緩存不僅能夠提升網站訪問速度,還能大大降低數據庫的 壓力。Redis提供了鍵過期功能,也提供了靈活的鍵淘汰策略,所以,現在Redis用在緩存的場合非常多。
-
分佈式會話
集羣模式下,在應用不多的情況下一般使用容器自帶的session複製功能就能滿足,當應用增多相對複雜的系統中, 一般都會搭建以Redis等內存數據庫為中心的session服務,session不再由容器管理,而是由session服務及內存 數據庫管理。
-
分佈式鎖
在很多互聯網公司中都使用了分佈式技術,分佈式技術帶來的技術挑戰是對同一個資源的併發訪問,如全局ID、減庫 存、秒殺等場景,併發量不大的場景可以使用數據庫的悲觀鎖、樂觀鎖來實現,但在併發量高的場合中,利用數據庫鎖 來控制資源的併發訪問是不太理想的,大大影響了數據庫的性能。可以利用Redis的setnx功能來編寫分佈式的鎖,如果設置返回1説明獲取鎖成功,否則獲取鎖失敗,實際應用中要考慮的細節要更多。
-
社交網絡
點贊、踩、關注/被關注、共同好友等是社交網站的基本功能,社交網站的訪問量通常來説比較大,而且傳統的關係數 據庫類型不適合存儲這種類型的數據,Redis提供的哈希、集合等數據結構能很方便的的實現這些功能。
-
最新列表
Redis列表結構,LPUSH可以在列表頭部插入一個內容ID作為關鍵字,LTRIM可用來限制列表的數量,這樣列表永遠為N個ID,無需查詢最新的列表,直接根據ID去到對應的內容頁即可。
Redis各版本介紹
Redis 的版本分為 穩定版(Stable) 和 開發版(Unstable),命名規則為 主版本號.次版本號.修訂號(如 7.0.11)。
- 主版本號:重大功能更新(如 5.x → 6.x)。
- 次版本號:新增功能或非破壞性改進(如 6.0 → 6.2)。
- 修訂號: bug 修復或小更新(如 6.2.1 → 6.2.2)。
目前(2025 年)的長期支持(LTS)版本為 6.x 和 7.x,舊版本逐步停止維護。
舊版本(3.x 及以下)
3.x版本已經不推薦生產環境使用了
- 代表版本:3.2(2016 年發佈)
- 特性:
- 支持簡單集羣(Redis Cluster),但存在節點故障轉移不夠靈活、數據遷移效率低等問題。
- 數據結構有限(僅支持字符串、哈希、列表、集合、有序集合)。
- 缺點:
- 無分層存儲、多線程 I/O 等現代特性,性能瓶頸明顯。
- 社區維護停止,存在安全漏洞風險。
4.x 版本
2017 年發佈,目前已停止維護,不推薦生產環境使用
- 關鍵特性:
- 模塊系統(Modules):支持第三方擴展(如 RedisJSON、RedisGraph 等),拓展功能生態。
- 混合持久化(AOF-RDB Hybrid):重啓時加載速度更快,減少數據丟失風險。
- 過期鍵異步刪除:避免大規模鍵過期時阻塞主線程。
- 缺點:
- 未引入多線程,高併發場景下性能受限。
- 官方維護截止到 2021 年,安全性不足。
5.x版本
2019 年發佈,維護至 2023 年,目前市場上很多公司正在使用該版本
- 關鍵特性:
- Redis Stream:正式引入流數據類型,支持發佈 - 訂閲、消息隊列、消費者組等功能,替代傳統的 Pub/Sub。
- 異步複製改進:從節點支持部分重同步,減少全量複製開銷。
- 內置監控指標:通過 INFO 命令提供更詳細的運行時統計信息。
- 缺點:
- 單線程模型未改變,多核 CPU 利用率低。
- 已停止官方維護,僅推薦測試環境使用。
6.x 版本(生產環境推薦!!!)
LTS 版本,2021 年發佈,維護至 2026 年。生產環境首選,尤其適合高併發、高吞吐量的業務(如緩存、實時分析)。
- 關鍵特性:
- 多線程 I/O:網絡請求處理支持多線程(非數據處理多線程),大幅提升高併發場景下的吞吐量。
- ACL 權限系統:替代傳統密碼認證,支持細粒度權限控制(如限制命令、鍵空間訪問)。
- 客户端緩存(Client-side Caching):減少客户端與服務端的交互次數,降低延遲。
- RDB 加密:數據持久化時支持加密存儲,保護靜態數據安全。
- 優化點:
- 改進集羣節點通信協議,提升 Redis Cluster 的穩定性。
- 增強內存管理,減少內存碎片。
7.x 版本
LTS 版本,2022 年發佈,維護至 2028 年,需要分佈式事務、海量數據存儲(內存成本敏感)、複雜數據處理的場景(如實時數據庫、物聯網數據存儲)。
- 革命性特性:
- 全局事務(Global Transactions):支持跨分片的分佈式事務,保證多節點數據一致性。
- 分層存儲(Memory-Tiered Storage):熱數據存儲在內存,冷數據自動下沉到磁盤,降低內存成本。
- Server-side Scripting 增強:Lua 腳本支持異步執行,避免阻塞主線程。
- JSON 數據類型升級:原生支持 JSON 路徑查詢(JSONPath)和部分更新,性能提升 50%+。
- 其他改進:
- 新的 EXACT 模式用於模糊查詢,提升鍵掃描效率。
- 支持 RESP3 協議,優化客户端與服務端交互格式。
安裝部署Redis6.2.x版本
Redis下載地址:https://download.redis.io/releases/
環境信息
| IP | 系統 | 規格 |
|---|---|---|
| 10.37.97.56 | Ubuntu | 4c8g |
下載解壓
# 下載
[root@master ~]# wget https://download.redis.io/releases/redis-6.2.18.tar.gz
# 解壓
[root@master ~]# tar -xvf redis-6.2.18.tar.gz
下載相關依賴並編譯
# 下載編譯工具
[root@master ~]# apt update && apt install -y gcc automake autoconf libtool make
下載工具説明
- gcc:GNU 編譯器套件,用於編譯 C/C++ 代碼。
- automake:生成 Makefile.in 文件,輔助自動化構建。
- autoconf:生成 configure 腳本,檢測系統環境。
- libtool:管理庫文件的編譯和鏈接,實現跨平台兼容。
- make:構建工具,根據 Makefile 編譯項目。
開始安裝
[root@master ~]# cd redis-6.2.18/
[root@master ~/redis-6.2.18]# make
...
#這裏會刷出大量的編譯信息,稍等一會即可
配置環境變量
# 創建軟連接
[root@master ~]# ln -s /root/redis-6.2.18 /root/redis
# 配置環境變量
[root@master ~]# echo "export PATH=$PATH:/root/redis/src" >> /etc/profile && source /etc/profile
創建數據目錄,將redis配置文件copy至該目錄下
# 創建數據目錄
[root@master ~]# mkdir -p /data00/data/redis
[root@master ~]# cp /root/redis/redis.conf /data00/data/redis/
# 創建日誌目錄
[root@master ~]# mkdir /var/log/redis
修改Redis配置文件
[root@master ~]# vim /data00/data/redis/redis.conf
# 第75行,修改遠程訪問地址
75:bind 0.0.0.0
# 第98行,修改端口號
98:port 6379
# 第259行,守護進程運行,默認位前台運行,需要修改為yes
259:daemonize yes
# 第304行,指定redis的日誌
304:logfile "/var/log/redis/redis.log"
# 第329行,指定數據庫的數量,默認是16個
329:databases 16
# 第433行,持久化的文件
433:dbfilename dump.rdb
# 第456行,設置redis的數據目錄,和我們上面創建的路徑保持一致
456:dir /data00/data/redis/
# 第903行,設置密碼,建議不要使用弱密碼
903:requirepass 123456
啓動Redis
# 啓動redis,指定啓動的配置文件
[root@master ~]# redis-server /data00/data/redis/redis.conf
# 查看端口,檢查是否啓動成功
[root@master ~]# ss -lntup | grep 6379
tcp LISTEN 0 511 0.0.0.0:6379 0.0.0.0:* users:(("redis-server",pid=1818909,fd=6))
連接redis
# 連接redis,-h指定IP,-p指定端口,-a指定密碼
[root@master ~]# redis-cli -h 127.0.0.1 -p 6379 -a '!Xinxin123'
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6379> info
# Server
redis_version:6.2.18
...# 會打印很多日誌信息