【Docker】docker compose 安装 Redis Stack
注:整理不易,请不要吝啬你的赞和收藏。
前文
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
创建配置文件
为了方便管理,建议创建一个配置文件用于管理 Redis 配置信息。
回到 /usr/local/software/docker/redisStack 目录下,创建名为 redis-stack.conf 的配置文件,并键入如下内容(各参数是什么,下文会有解释):
# 以下是一些常用的配置,可根据个人需要注释
port 6379
daemonize no
requirepass gusy1234
appendonly yes
save 900 1
save 300 10
save 60 10000
maxmemory 256mb
maxmemory-policy allkeys-lru
bind 0.0.0.0
# protected-mode yes# 以下是加载Redis的模块,根据个人所需注释loadmodule /opt/redis-stack/lib/rediscompat.so
loadmodule /opt/redis-stack/lib/redisearch.so
loadmodule /opt/redis-stack/lib/redistimeseries.so
loadmodule /opt/redis-stack/lib/rejson.so
loadmodule /opt/redis-stack/lib/redisbloom.so
loadmodule /opt/redis-stack/lib/redisgears.so v8-plugin-path /opt/redis-stack/lib/libredisgears_v8_plugin.so
创建
创建 docker-compose.yml 文件
回到 /usr/local/software/docker/redisStack 目录下
# 返回 /redisStack 目录
cd /usr/local/software/docker/redisStack
# 创建 docker-compose.yml 文件
vim docker-compose.yml
方式一:使用配置文件方式
docker-compose.yml 文件中复制以下内容(需要用到上述的 redis-stack.config 文件):
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:- /usr/local/software/docker/redisStack/redis-stack.conf:/etc/redis-stack.conf# 1.使用主机绝对路径挂载数据- /usr/local/software/docker/redisStack/data:/data# 2.如果使用 docker 卷挂载数据,需要定义 'volumes:'# - redis-data:/datacommand: [ "redis-server", "/etc/redis-stack.conf" ]restart: always
# 如果你使用 docker 卷挂载,请解开注释
# 你可以通过命令 'docker volume inspect redis-data' 查看卷的物理位置等信息
#volumes:
# redis-data:
方式二:使用无配置文件方式
使用全命令方式,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:/datacommand: ["redis-server",# 以下是一些常用的配置,可根据个人需要注释"--requirepass", "gusy1234", # 配置密码"--appendonly", "yes", # 启用AOF"--save", "900", "1", # RDB: 每900秒至少有1个更改则保存"--save", "300", "10", # RDB: 每300秒至少有10个更改则保存"--save", "60", "10000", # RDB: 每60秒至少有10000个更改则保存"--maxmemory", "256mb", # 设置最大内存为256MB"--maxmemory-policy", "allkeys-lru", # 内存淘汰策略# "--bind", "0.0.0.0", # 允许所有网络访问# "--protected-mode", "yes", # 启用保护模式# 以下是加载个人所需的模块"--loadmodule", "/opt/redis-stack/lib/rediscompat.so","--loadmodule", "/opt/redis-stack/lib/redisearch.so","--loadmodule", "/opt/redis-stack/lib/redistimeseries.so","--loadmodule", "/opt/redis-stack/lib/rejson.so","--loadmodule", "/opt/redis-stack/lib/redisbloom.so","--loadmodule", "/opt/redis-stack/lib/redisgears.so","v8-plugin-path", "/opt/redis-stack/lib/libredisgears_v8_plugin.so"]restart: 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' 查看卷的物理位置等信息。
command:
- --requirepass:设置 Redis 访问密码。
- --maxmemory:设置 Redis 的最大内存限制(例如 512mb,1gb,支持的单位有:kb、mb、gb)。
- --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)最短的键。适用于需要优先淘汰即将过期的键的场景。
- --appendonly:启用 AOF(Append-Only File)持久化(yes 或 no)。
- --save:配置 RDB 快照的保存策略(例如“900 1 300 10 60 10000”)。
- --bind:绑定 Redis 监听的 IP 地址(默认是 0.0.0.0,即所有接口)。
- --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
Redis 其他语法
# Redis 中查看所有配置
CONFIG GET *