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

docker容器高效连接 Redis 的方式

在微服务架构中,Redis 是一种常见的高效缓存解决方案,通常用于存储临时数据、会话信息或 token。如何在服务容器中高效、稳定地连接 Redis 是架构设计中的一个重要环节。

这篇博客将以实际项目为例,详细介绍如何配置 Flask 应用中的服务容器连接宿主机上的 Redis 服务.
 

📦 一、服务架构概述

通常,我们的应用程序运行在容器中,而 Redis 可以运行在宿主主机上或者单独的容器内。为了避免不必要的端口映射和复杂的网络配置,以下介绍的是如何通过容器中的 Flask 应用连接宿主机上的 Redis 服务。

架构图可以简单地表示为:
+-----------------+      +-----------------+
|                 |      |                 |
|   Flask 容器    | ---> | Redis 服务 (宿主机)|
|                 |      |                 |
+-----------------+      +-----------------+
 

⚙️ 二、Redis 容器与 Flask 服务容器的网络配置

宿主机上 Redis 服务的配置

首先,我们需要在宿主机上运行 Redis 并确保其对外开放接口,允许来自容器的连接。

  1. 安装 Redis (如果尚未安装):
     

    sudo apt-get install redis-server
    

2 配置 Redis 监听所有接口: 打开 Redis 的配置文件 /etc/redis/redis.conf,确保 bind 选项设置为 0.0.0.0,允许来自外部的连接: 
 

bind 0.0.0.0

并确保将 Redis 配置为带有密码保护:

requirepass 123...

3.重启 Redis 服务:

sudo systemctl restart redis-server

 4.允许防火墙端口: 开放 Redis 的端口 6379,确保 Flask 容器可以连接:

sudo ufw allow 6379

🌐 三、Flask 服务容器如何连接 Redis

当 Redis 在宿主主机上运行时,Flask 容器需要通过宿主机的 IP 地址来连接到 Redis 服务。假设宿主机的 IP 地址为 172.29.11.11,以下是如何在 Flask 应用中配置 Redis 连接。

1. Redis 连接配置

在 Flask 应用的代码中,我们通过 redis.StrictRedis 来连接 Redis。
 

import redis# 配置 Redis 连接
redis_client = redis.StrictRedis(host='172.29.11.11',  # 宿主机的 IP 地址port=6379,             # Redis 端口password='123...',   # Redis 的密码db=0,                  # 默认数据库decode_responses=True,  # 自动解码 Redis 响应socket_timeout=5        # 设置超时时间
)
2. Flask 容器的运行

假设你已经有了一个 Flask 服务的 Docker 容器,运行该容器时的命令如下:
 

docker run -d --name myapp -p 5000:5000 \-e REDIS_HOST=172.29.11.11 \${{ secrets.DOCKER_HUB_USERNAME }}/myapp:${{ github.sha }}

这个命令使用环境变量 REDIS_HOST 将 Redis 的宿主机 IP 地址注入到容器中。在 Flask 应用中,你也可以通过读取这个环境变量来动态配置 Redis 连接。
 

import osredis_client = redis.StrictRedis(host=os.getenv('REDIS_HOST', 'localhost'),  # 通过环境变量读取 Redis 地址port=6379,password='123...',db=0,decode_responses=True,socket_timeout=5
)
总结:从容器中连接宿主主机的最佳实践
  • 网络配置:确保宿主机的 Redis 监听所有接口 (0.0.0.0) 并开放了防火墙端口。
  • 连接方式:使用宿主机的 IP 地址来连接 Redis,而不是 localhost
  • 安全性:通过密码 (requirepass) 来确保 Redis 连接的安全性。

相关文章:

docker容器高效连接 Redis 的方式

在微服务架构中,Redis 是一种常见的高效缓存解决方案,通常用于存储临时数据、会话信息或 token。如何在服务容器中高效、稳定地连接 Redis 是架构设计中的一个重要环节。 这篇博客将以实际项目为例,详细介绍如何配置 Flask 应用中的服务容器…...

手撕Python之生成器、装饰器、异常

1.生成器 生成器的定义方式&#xff1a;在函数中使用yield yield值&#xff1a;将值返回到调用处 我们需要使用next()进行获取yield的返回值 yield的使用以及生成器函数的返回的接收next() def test():yield 1,2,3ttest() print(t) #<generator object test at 0x01B77…...

LabVIEW步进电机控制方式

在LabVIEW中控制步进电机可以通过多种方式实现。每种方法都有其独特的优缺点&#xff0c;适用于不同的应用场合。下面详细介绍几种常见的步进电机控制方式&#xff0c;并进行比较。 1. 开环控制&#xff08;Open-Loop Control&#xff09; 特点 通过定期发出脉冲信号来控制步进…...

vllm源码解析(五):LLM模型推理

八 模型推理细节探索 8.1 回顾下step的流程 def step(self) -> List[Union[RequestOutput, EmbeddingRequestOutput]]:# 多GPU并行推理时走AsyncLLMEngine分支。如果进入当前LLMEngine,性能会下降&#xff0c;这里会抛出异常。if self.parallel_config.pipeline_parallel_s…...

数学建模笔记——熵权法(客观赋权法)

数学建模笔记——熵权法[客观赋权法] 熵权法(客观赋权法)1. 基本概念2. 基本步骤3. 典型例题3.1 正向化矩阵3.2 对正向化矩阵进行矩阵标准化3.3 计算概率矩阵P3.4 计算熵权3.5 计算得分 4. python代码实现 熵权法(客观赋权法) 1. 基本概念 熵权法,物理学名词,按照信息论基本原…...

XGBoost算法-确定树的结构

我们在求解上面的w和obj的过程中&#xff0c;都是假定我们的树结构是确定的&#xff0c;因为当我们改变树中划分条件的时候&#xff0c;每个叶子节点对应的样本有可能是不一样的&#xff0c;我们的G和H也是不一样的&#xff0c;得到的最优w和最优obj肯定也是不一样的。 到底哪一…...

concurrentHashMap线程安全实现的原理

1. Segment 数组 ConcurrentHashMap 内部维护一个 Segment 数组&#xff0c;每个 Segment 都是一个小型的 HashMap。Segment 继承自 ReentrantLock&#xff0c;因此每个 Segment 都是一个可重入锁。 2. 并发级别 ConcurrentHashMap 在构造时可以指定并发级别&#xff08;con…...

域名证书,泛域名证书,sni

文章目录 前言一、证书1.全域名证书2.泛域名证书 二、域名证书的使用1、浏览器请求域名证书流程对全域名证书的请求流程对泛域名证书的请求流程ssl client-hello携带server name 报文 2、浏览器对证书的验证流程 三、域名证书和sni 前言 本文介绍了泛域名证书和全域名证书的区别…...

Pytest夹具autouse参数使用。True表示会自动在测试中使用,而无需显式指定

1. 全局conftest文件日志记录功能 # 当前路径(使用 abspath 方法可通过dos窗口执行) current_path os.path.dirname(os.path.abspath(__file__)) # 上上级目录 ffather_path os.path.abspath(os.path.join(current_path,"../"))LOG_FILE_PATH f{ffather_path}/lo…...

Linux:归档及压缩

tar命令 • tar 集成备份工具 – -c&#xff1a;创建归档 – -x&#xff1a;释放归档 – -f&#xff1a;指定归档文件名称,必须在所有选项的最后 – -z、-j、-J&#xff1a;调用 .gz、.bz2、.xz 格式工具进行处理 – -t&#xff1a;显示归档中的文件清单 – -C&#xff1a;指定…...

jenkins 安装

jenkins安装 jenkins官网 中文网址 安装设置 所有jenkins版本 内存512M以上&#xff0c;10Gb磁盘&#xff1b;安装jdk&#xff0c;需要java8以上下载较新的版本&#xff0c;否则安装插件时可能报错版本过低 # 搜索java yum search java | grep -iE "jdk"# 安装jd…...

mysql学习教程,从入门到精通,MySQL 删除数据库教程(6)

1、MySQL 删除数据库 使用普通用户登陆 MySQL 服务器&#xff0c;你可能需要特定的权限来创建或者删除 MySQL 数据库&#xff0c;所以我们这边使用 root 用户登录&#xff0c;root 用户拥有最高权限。 在删除数据库过程中&#xff0c;务必要十分谨慎&#xff0c;因为在执行删除…...

C语言:刷题日志(2)

一.币值转换 输入一个整数&#xff08;位数不超过9位&#xff09;代表一个人民币值&#xff08;单位为元&#xff09;&#xff0c;请转换成财务要求的大写中文格式。如23108元&#xff0c;转换后变成“贰万叁仟壹百零捌”元。为了简化输出&#xff0c;用小写英文字母a-j顺序代…...

微带结环行器仿真分析+HFSS工程文件

微带结环行器仿真分析HFSS工程文件 工程下载&#xff1a;微带结环行器仿真分析HFSS工程文件 我使用HFSS版本的是HFSS 2024 R2 参考书籍《微波铁氧体器件HFSS设计原理》和视频微带结环行器HFSS仿真 1、环形器简介 环行器是一个有单向传输特性的三端口器件&#xff0c;它表明…...

怎么仿同款小程序的开发制作方法介绍

很多老板想要仿小程序系统&#xff0c;就是想要做个和别人界面功能类似的同款小程序系统&#xff0c;咨询瀚林问该怎么开发制作&#xff1f;本次瀚林就为大家介绍一下仿制同款小程序系统的方法。 1、确认功能需求 想要模仿同款小程序系统&#xff0c;那么首先需要找到自己想要…...

音视频入门基础:WAV专题(10)——FFmpeg源码中计算WAV音频文件每个packet的pts、dts的实现

一、引言 从文章《音视频入门基础&#xff1a;WAV专题&#xff08;6&#xff09;——通过FFprobe显示WAV音频文件每个数据包的信息》中我们可以知道&#xff0c;通过FFprobe命令可以打印WAV音频文件每个packet&#xff08;也称为数据包或多媒体包&#xff09;的信息&#xff0…...

0.91寸OLED屏幕大小的音频频谱,炫酷

&#xff08;后文有详细介绍&#xff09; 频谱扫描&#xff1a; 迷你音频频谱——频率扫描 音乐律动&#xff1a; 迷你音频频谱——频率扫描 迷你音频频谱——音乐2 迷你音频频谱——音乐3 一、简介 音频频谱在最小0.91寸OLED 屏幕上显示&#xff0c;小巧玲珑 二、应用场景 本…...

6. LinkedList与链表

一、ArrayList的缺陷 通过源码知道&#xff0c;ArrayList底层使用数组来存储元素&#xff0c;由于其底层是一段连续空间&#xff0c;当在ArrayList任意位置插入或者删除元素时&#xff0c;就需要将后序元素整体往前或者往后搬移&#xff0c;时间复杂度为O(n)&#xff0c;效率比…...

Statcounter Global Stats 提供全球统计数据信息

Statcounter Global Stats 提供全球统计数据信息 1. Statcounter Global Stats2. Mobile & Tablet Android Version Market Share WorldwideReferences Statcounter Global Stats https://gs.statcounter.com/ Statcounter Global Stats are brought to you by Statcounte…...

Linux kernel中的dts dtsi dtb dtc dtb.img dtbo.img

1、问题 kernel与hsm会设置一些gpio&#xff0c;但是某些gpio会在kernel与hsm侧共同设置&#xff0c;导致最终的设置结果失败&#xff0c;将kernel侧在dts文件中设置的gpio注释掉之后&#xff0c;发现hsm设置gpio时还是失败 2、问题原因 因为dts文件不仅仅会影响kernel镜像&…...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波&#xff1a;可以用来解决所提出的地质任务的波&#xff1b;干扰波&#xff1a;所有妨碍辨认、追踪有效波的其他波。 地震勘探中&#xff0c;有效波和干扰波是相对的。例如&#xff0c;在反射波…...

Qt Widget类解析与代码注释

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码&#xff0c;写上注释 当然可以&#xff01;这段代码是 Qt …...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

Axios请求超时重发机制

Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式&#xff1a; 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云

目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

【从零学习JVM|第三篇】类的生命周期(高频面试题)

前言&#xff1a; 在Java编程中&#xff0c;类的生命周期是指类从被加载到内存中开始&#xff0c;到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期&#xff0c;让读者对此有深刻印象。 目录 ​…...

(一)单例模式

一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...

PostgreSQL——环境搭建

一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在&#xff0…...

探索Selenium:自动化测试的神奇钥匙

目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...

AxureRP-Pro-Beta-Setup_114413.exe (6.0.0.2887)

Name&#xff1a;3ddown Serial&#xff1a;FiCGEezgdGoYILo8U/2MFyCWj0jZoJc/sziRRj2/ENvtEq7w1RH97k5MWctqVHA 注册用户名&#xff1a;Axure 序列号&#xff1a;8t3Yk/zu4cX601/seX6wBZgYRVj/lkC2PICCdO4sFKCCLx8mcCnccoylVb40lP...