当前位置: 首页 > news >正文

【Docker】docker compose 安装 Redis Stack

注:整理不易,请不要吝啬你的赞和收藏。

前文

Redis Stack 什么是?

简单来说,Redis Stack 是增强版的 Redis ,它在传统的 Redis 数据库基础上增加了一些高级功能和模块,以支持更多的使用场景和需求。Redis Stack 包括以下几个主要组件:
  1. RedisJSON:用于在 Redis 中存储和操作 JSON 数据结构,支持复杂的 JSON 查询和更新操作。
  2. RediSearch:提供全文搜索和二次索引功能,使得在 Redis 中可以进行复杂的搜索查询。
  3. RedisGraph:一个图数据库模块,支持图数据结构的存储和查询,适用于社交网络、推荐系统等场景。
  4. RedisTimeSeries:专门用于时间序列数据的存储和分析,支持高效的时间序列数据写入和查询。
  5. 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
执行结果
440d15df02574cfb91ef109ebac6fbbe.png

验证服务

1、查看服务是否状态
docker-compose ps
查看日志
docker-compose logs -f redis-stack-server
2、telnet 6379 端口验证
telnet 127.0.0.1 6379
3、使用工具验证 ( 我本地安装了 Redis Insight )
ce9200cdd97d4e189f112ce8f37fd161.png

进入容器

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 *

相关文章:

【Docker】docker compose 安装 Redis Stack

注&#xff1a;整理不易&#xff0c;请不要吝啬你的赞和收藏。 前文 Redis Stack 什么是&#xff1f; 简单来说&#xff0c;Redis Stack 是增强版的 Redis &#xff0c;它在传统的 Redis 数据库基础上增加了一些高级功能和模块&#xff0c;以支持更多的使用场景和需求。Redis…...

pytest 常用插件

pytest 提供了许多功能强大的插件来增强测试体验和执行能力。以下是一些常用的 pytest 插件介绍&#xff0c;并结合 pytest.main() 进行使用的示例。 1. pytest-xdist pytest-xdist 插件用于并行化测试的执行&#xff0c;可以将测试分配到多个 CPU 核心并行运行&#xff0c;从…...

浅谈云计算05 | 云存储等级及其接口工作原理

一、云存储设备 在当今数字化飞速发展的时代&#xff0c;数据已然成为个人、企业乃至整个社会的核心资产。从日常生活中的珍贵照片、视频&#xff0c;到企业运营里的关键业务文档、客户资料&#xff0c;数据量呈爆炸式增长。面对海量的数据&#xff0c;如何安全、高效且便捷地存…...

linux:文件的创建/删除/复制/移动/查看/查找/权限/类型/压缩/打包,文本处理sed,awk

关于文件的关键词 创建 touch 删除 rm 复制 cp 权限 chmod 移动 mv 查看内容 cat(全部); head(前10行); tail(末尾10行); more,less,grep 查找 find 压缩 gzip ; bzip 打包 tar 编辑 sed 文本处理 awk 创建文件 格式&#xff1a; touch 文件名 删除文件 复制文…...

CentOS 8 如何安装java与mysql

在CentOS 8上安装Java和MySQL的步骤如下&#xff1a; 1. 安装 Java 1.1 安装 OpenJDK&#xff08;推荐&#xff09; CentOS 8 默认的软件仓库提供了 OpenJDK 包&#xff0c;您可以直接使用 dnf 命令安装。 # 更新系统 sudo dnf update -y# 安装 OpenJDK 11&#xff08;Cent…...

Go语言之路————go基本语法、数据类型、变量、常量、输出

Go语言之路————go基本语法、数据类型、变量、常量 前言一、基本语法知识二、数据类型三、常量四、变量五、作用域六、输入输出 前言 我是一名多年Java开发人员&#xff0c;因为工作需要现在要学习go语言&#xff0c;Go语言之路是一个系列&#xff0c;记录着我从0开始接触G…...

音视频入门基础:MPEG2-PS专题(7)——通过FFprobe显示PS流每个packet的信息

音视频入门基础&#xff1a;MPEG2-PS专题系列文章&#xff1a; 音视频入门基础&#xff1a;MPEG2-PS专题&#xff08;1&#xff09;——MPEG2-PS官方文档下载 音视频入门基础&#xff1a;MPEG2-PS专题&#xff08;2&#xff09;——使用FFmpeg命令生成ps文件 音视频入门基础…...

Docker安装和卸载(centos)

Docker安装和卸载 一&#xff0c;已安装Docker&#xff0c;卸载Docker 1.方法一 sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine​ 如果出现以下提示就证明没卸载…...

YOLOv8从菜鸟到精通(二):YOLOv8数据标注以及模型训练

数据标注 前期准备 先打开Anaconda Navigator&#xff0c;点击Environment&#xff0c;再点击new(new是我下载anaconda的文件夹名称)&#xff0c;然后点击创建 点击绿色按钮&#xff0c;并点击Open Terminal 输入labelimg便可打开它,labelimg是图像标注工具&#xff0c;在上篇…...

Winforms开发基础之非主线程操作UI控件的误区

前言 想象一下&#xff0c;你正在开发一个桌面应用程序&#xff0c;用户点击按钮后需要执行一个耗时操作。为了避免界面卡顿&#xff0c;你决定使用后台线程来处理任务。然而&#xff0c;当你在后台线程中尝试更新UI控件时&#xff0c;程序突然崩溃了。这是为什么呢&#xff1…...

Flutter中Get.snackbar和Get.dialog关闭冲突问题记录

背景&#xff1a; 在使用GetX框架时&#xff0c;同时使用了Get.snackbar提示框和Get.dialog加载框&#xff0c;当这两个widget同时存在时&#xff0c;Get.dialog加载框调用Get.back()无法正常关闭。 冲突解释&#xff1a; 之所以会产生冲突&#xff0c;是因为Get.snackbar在关…...

springcloudalibaba集成fegin报错ClassNotFoundException解决方案

集成fegin遇到问题: java.lang.ClassNotFoundException: com.netflix.config.CachedDynamicIntProperty 解决方案: 在pom文件中添加依赖 <dependency><groupId>com.netflix.archaius</groupId><artifactId>archaius-core</artifactId><versi…...

【HTML+CSS+JS+VUE】web前端教程-31-css3新特性

圆角 div{width: 100px;height: 100px;background-color: saddlebrown;border-radius: 5px;}阴影 div{width: 200px;height: 100px;background-color: saddlebrown;margin: 0 auto;box-shadow: 10px 10px 20px rgba(0, 0, 0, 0.5);}...

力扣264. 丑数 II

给你一个整数 n &#xff0c;请你找出并返回第 n 个 丑数 。丑数 就是质因子只包含 2、3 和 5 的正整数。 //用一个数组来保存第1到第n个丑数 //一个丑数必须是乘以较小的丑数的 2、3 或 5来得到。 //使用三路合并方法&#xff1a;L2、L3 和 L5三个指针遍历2、3、5倍的丑数序列…...

计算机网络之---TCP连接管理

TCP连接管理 TCP&#xff08;传输控制协议&#xff09;是面向连接的协议&#xff0c;在数据传输之前需要建立连接&#xff0c;在数据传输完成后需要断开连接。TCP连接的建立和断开都遵循特定的规则&#xff0c;分别称为三次握手&#xff08;Three-Way Handshake&#xff09;和四…...

《CPython Internals》阅读笔记:p118-p150

《CPython Internals》学习第 8 天&#xff0c;p118-p150 总结&#xff0c;总计 33 页。 一、技术总结 补充一些本人整理的关于 Context-Free Grammar(CFG) 的知识。 1.symbol(符号) A mathematical symbol is a figure or a combination of figures that is used to repre…...

C/C++ 数据结构与算法【排序】 常见7大排序详细解析【日常学习,考研必备】带图+详细代码

常见7种排序算法 冒泡排序&#xff08;Bubble Sort&#xff09;选择排序&#xff08;Selection Sort&#xff09;插入排序&#xff08;Insertion Sort&#xff09;希尔排序&#xff08;Shell Sort&#xff09;归并排序&#xff08;Merge Sort&#xff09;快速排序&#xff08;…...

三只松鼠携手爱零食,社区零售新高峰拔地而起

合纵连横&#xff0c;这是当前零售行业发展的一个主旋律。从商超之王胖东来的全国调改&#xff0c;到社区零售正在进行的渠道变革&#xff0c;竞争的激烈和商业模式的升级令人目不暇接。 量贩零食赛道在过去一年就是如此&#xff0c;有杀伐&#xff0c;有并购&#xff0c;刀光…...

Java聊天小程序

拟设计一个基于 Java 技术的局域网在线聊天系统,实现客户端与服务器之间的实时通信。系统分为客户端和服务器端两类,客户端用于发送和接收消息,服务器端负责接收客户端请求并处理消息。客户端通过图形界面提供用户友好的操作界面,服务器端监听多个客户端的连接并管理消息通…...

Kibana操作ES基础

废话少说&#xff0c;开干&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;截图更清晰&#xff0c;复制在下面 #库操作#创建索引【相当于数据库的库】 PUT /first_index#获…...

【机器视觉】单目测距——运动结构恢复

ps&#xff1a;图是随便找的&#xff0c;为了凑个封面 前言 在前面对光流法进行进一步改进&#xff0c;希望将2D光流推广至3D场景流时&#xff0c;发现2D转3D过程中存在尺度歧义问题&#xff0c;需要补全摄像头拍摄图像中缺失的深度信息&#xff0c;否则解空间不收敛&#xf…...

Nginx server_name 配置说明

Nginx 是一个高性能的反向代理和负载均衡服务器&#xff0c;其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机&#xff08;Virtual Host&#xff09;。 1. 简介 Nginx 使用 server_name 指令来确定…...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全&#xff1a;零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言&#xff1a;云原生安全的范式革命 随着云原生技术的普及&#xff0c;安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测&#xff0c;到2025年&#xff0c;零信任架构将成为超…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

自然语言处理——循环神经网络

自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元&#xff08;GRU&#xff09;长短期记忆神经网络&#xff08;LSTM&#xff09…...

JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案

JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停​​ 1. ​​安全点(Safepoint)阻塞​​ ​​现象​​:JVM暂停但无GC日志,日志显示No GCs detected。​​原因​​:JVM等待所有线程进入安全点(如…...

Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信

文章目录 Linux C语言网络编程详细入门教程&#xff1a;如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket&#xff08;服务端和客户端都要&#xff09;2. 绑定本地地址和端口&#x…...

Selenium常用函数介绍

目录 一&#xff0c;元素定位 1.1 cssSeector 1.2 xpath 二&#xff0c;操作测试对象 三&#xff0c;窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四&#xff0c;弹窗 五&#xff0c;等待 六&#xff0c;导航 七&#xff0c;文件上传 …...

pikachu靶场通关笔记19 SQL注入02-字符型注入(GET)

目录 一、SQL注入 二、字符型SQL注入 三、字符型注入与数字型注入 四、源码分析 五、渗透实战 1、渗透准备 2、SQL注入探测 &#xff08;1&#xff09;输入单引号 &#xff08;2&#xff09;万能注入语句 3、获取回显列orderby 4、获取数据库名database 5、获取表名…...

【堆垛策略】设计方法

堆垛策略的设计是积木堆叠系统的核心&#xff0c;直接影响堆叠的稳定性、效率和容错能力。以下是分层次的堆垛策略设计方法&#xff0c;涵盖基础规则、优化算法和容错机制&#xff1a; 1. 基础堆垛规则 (1) 物理稳定性优先 重心原则&#xff1a; 大尺寸/重量积木在下&#xf…...