注:整理不易,請不要吝嗇你的贊和收藏。
前文
Redis Stack 什么是?
簡單來說,Redis Stack 是增強版的 Redis ,它在傳統的 Redis 數據庫基礎上增加了一些高級功能和模塊,以支持更多的使用場景和需求。Redis Stack 包括以下幾個主要組件:
- RedisJSON:用于在 Redis 中存儲和操作 JSON 數據結構,支持復雜的 JSON 查詢和更新操作。
- RediSearch:提供全文搜索和二次索引功能,使得在 Redis 中可以進行復雜的搜索查詢。
- RedisGraph:一個圖數據庫模塊,支持圖數據結構的存儲和查詢,適用于社交網絡、推薦系統等場景。
- RedisTimeSeries:專門用于時間序列數據的存儲和分析,支持高效的時間序列數據寫入和查詢。
- RedisBloom:提供概率數據結構如布隆過濾器、HyperLogLog 等,用于高效地處理大規模數據集。
Redis Stack 通過這些模塊的組合,使得開發者可以在一個統一的平臺上處理多種類型的數據和查詢需求,極大地擴展了 Redis 的應用場景。
鏡像版本說明
官方提供了兩種鏡像版本,點擊查看: redis-stack可用版本 和 redis-stack-server可用版本
- redis/redis-stack:包含 Redis Stack server 和 Redis Insight。該容器最適合本地開發。
- redis/redis-stack-server:僅提供 Redis Stack server 。該容器最適合生產部署。
兩者區別在于有沒有帶有 RedisInsight web可視化界面,redis/redis-stack 帶有 RedisInsight。
注:由于我不需要 web 版的 RedisInsight ,所以選擇 redis/redis-stack-server 鏡像。
準備
安裝 docker-compose
已安裝請跳過
# 檢查是否安裝
docker-compose --version
# 通過 curl 安裝
sudo curl -L "https://github.com/docker/compose/releases/download/v2.23.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 設置權限
sudo chmod +x /usr/local/bin/docker-compose
創建掛載目錄
# 宿主機上創建數據持久化目錄
# 具體目錄個人自定義,我為了方便管理 docker 掛載配置全部放在 /usr/local/software/docker 目錄下
mkdir -p /usr/local/software/docker/redisStack/data
創建
創建 docker-compose.yml 文件
回到 /usr/local/software/docker/redisStack 目錄下
# 返回 /redisStack 目錄
cd /usr/local/software/docker/redisStack
# 創建 docker-compose.yml 文件
vim docker-compose.yml
復制以下內容:
version: '3.8'
services:redis-stack-server:image: redis/redis-stack-server:latestcontainer_name: redis-stack-serverports:- "6379:6379"# 如果使用 redis-stack 鏡像,請解開注釋,8001端口為 Redis Insight WEB UI 默認端口# - "8001:8001"volumes:# 1.使用主機絕對路徑掛載數據- /usr/local/software/docker/redisStack/data:/data# 2.如果使用 docker 卷掛載數據,需要定義 'volumes:'# - redis-data:/dataenvironment:- REDIS_PASSWORD=gusy1234# 以下為介紹用,可刪除# 核心配置:# - REDIS_PORT=6379# - REDIS_PASSWORD=gusy1234# - REDIS_DATABASES=16# - REDIS_MAXMEMORY=512mb# - REDIS_MAXMEMORY_POLICY=allkeys-lru# 持久化配置:# - REDIS_APPENDONLY=yes# - REDIS_SAVE="900 1 300 10 60 10000"# 網絡安全配置:# - REDIS_BIND=0.0.0.0# - REDIS_PROTECTED_MODE=yesrestart: always
# 如果你使用 docker 卷掛載,請解開注釋
# 你可以通過命令 'docker volume inspect redis-data' 查看卷的物理位置等信息
#volumes:
# redis-data:
配置說明
iamge:指定 Redis Stack server 的鏡像版本
ports:
- 6379:6379:將容器的 Redis 端口映射到主機的 6379 端口。
- 8001:8001:將容器的 RedisInsight 端口映射到主機的 8001 端口(如果選擇 Redis Stack 鏡像可配置)。
volumes:
- ../redisStack/data:/data:使用主機絕對路徑掛載數據,語法:‘宿主機目錄:容器目錄’。
- redis-data:/data:使用 docker 卷掛載數據,需要定義 'volumes:',你可以通過命令 'docker volume inspect redis-data' 查看卷的物理位置等信息。
environment:
- REDIS_PORT:指定 Redis 服務的端口號(默認是 6379)。
- REDIS_PASSWORD:設置 Redis 訪問密碼。
- REDIS_DATABASES:設置 Redis 支持的數據庫數量(默認是 16)。
- REDIS_MAXMEMORY:設置 Redis 的最大內存限制(例如 512mb,1gb,支持的單位有:kb、mb、gb)。
- REDIS_MAXMEMORY_POLICY:設置內存達到上限時的淘汰策略(例如 allkeys-lru,默認 noeviction)。
# 可選值:
1 noeviction(默認):當內存不足時,新寫入操作會返回錯誤(如 (error) OOM command not allowed when used memory > 'maxmemory')。適用于不允許丟失任何數據的場景。
2 allkeys-lru:從所有鍵中淘汰最近最少使用的鍵。適用于需要緩存大量數據且可以接受淘汰部分數據的場景。
3 volatile-lru:僅從設置了過期時間的鍵中淘汰最近最少使用的鍵。適用于需要保留永久數據但可以淘汰緩存數據的場景。
4 allkeys-random:從所有鍵中隨機淘汰鍵。適用于對淘汰策略沒有特殊要求的場景。
5 volatile-random:僅從設置了過期時間的鍵中隨機淘汰鍵。適用于需要保留永久數據但可以隨機淘汰緩存數據的場景。
6 allkeys-lfu(4.0版本以上支持):從所有鍵中淘汰最不經常使用的鍵。適用于需要根據使用頻率淘汰數據的場景。
7 volatile-lfu(4.0版本以上支持):僅從設置了過期時間的鍵中淘汰最不經常使用的鍵。適用于需要根據使用頻率淘汰緩存數據的場景。
8 volatile-ttl:從設置了過期時間的鍵中淘汰剩余生存時間(TTL)最短的鍵。適用于需要優先淘汰即將過期的鍵的場景。
- REDIS_APPENDONLY:啟用 AOF(Append-Only File)持久化(yes 或 no)。
- REDIS_SAVE:配置 RDB 快照的保存策略(例如“900 1 300 10 60 10000”)。
# “900 1 300 10 60 10000” 表示:
如果 900 秒(15 分鐘)內發生至少 1 次寫操作,則觸發快照保存。
如果 300 秒(5 分鐘)內發生至少 10 次寫操作,則觸發快照保存。
如果 60 秒(1 分鐘)內發生至少 10,000 次寫操作,則觸發快照保存。
- REDIS_BIND:綁定 Redis 監聽的 IP 地址(默認是 0.0.0.0,即所有接口)。
- REDIS_PROTECTED_MODE:啟用保護模式(yes 或 no)。
驗證配置
docker-compose -f docker-compose.yml config
啟動
啟動服務
# 啟動服務
docker-compose up -d
執行結果

驗證服務
1、查看服務是否狀態
docker-compose ps
查看日志
docker-compose logs -f redis-stack-server
2、telnet 6379 端口驗證
telnet 127.0.0.1 6379
3、使用工具驗證 ( 我本地安裝了 Redis Insight )

進入容器
docker-compose exec redis-stack-server /bin/bash
拓展
docker-compose 其它語法
# 進入 docker-compose.yml 文件所在目錄
# 停止服務
docker-compose down
# 進入容器
docker-compose exec <service_name> /bin/bash