K8S下redis哨兵集群使用secret隐藏configmap内明文密码方案详解
#作者:朱雷
文章目录
- 一、背景环境及方案说明
- 1.1、环境说明
- 1.2、方案一:使用配置文件设置密码
- 1.3、方案二:使用args 的命令行传参设置密码
- 二、redis secret configmap deployment参考
- 2.1 创建secret-redis.yaml参考
- 2.2 修改configmap配置参考
- 2.2.1 哨兵节点修改(每个节点都修改)
- 2.2.2 主从节点配置修改
- 2.2.3 使用命令行参数指定密码(本小节与上面两小节互斥)
- 2.3 修改deployment配置参考
- 2.3.1 master&slaves节点的deployment的yaml修改
- 2.3.2 哨兵节点的deployment的yaml修改
- 2.3.4 镜像环境变量参考
- 三、测试是否生效
- 四、 注意事项
一、背景环境及方案说明
Redis 哨兵configmap里包含明文密码,需要处理不在configmap内显示明文密码。
1.1、环境说明
方案基于Redis-5.0.14 哨兵版本(5.x,6.x版本兼容)
方案基于redis-sentinel-exporter-5.0.8版本
方案基于容器环境变量
使用两种方案的其中任意一种均可实现
1.2、方案一:使用配置文件设置密码
参照 2.2.1 和2.2.2 修改configmap
参照 2.3.1 和2.3.2 修改deployment
1.3、方案二:使用args 的命令行传参设置密码
参照 2.2.3.1 和2.2.3.2 修改configmap
参照 2.3.3.1 和2.3.3.2 修改deployment
二、redis secret configmap deployment参考
2.1 创建secret-redis.yaml参考
${}内为redis密码的base64的编码,若认证和同步密码不一致分别定义即可
apiVersion: v1
data:password: ${aGFyYm9yMjM0NSM=}
kind: Secret
metadata:name: redis-auth-secretnamespace: paas-middleware
2.2 修改configmap配置参考
2.2.1 哨兵节点修改(每个节点都修改)
apiVersion: v1
data:redis-docker-entrypoint.sh: |#!/bin/bashif [ ! -f "/redis-conf/redis.conf" ]; thencp /etc/redis/redis.conf /redis-conf/redis.conf**echo -e "sentinel auth-pass mymaster ${REDIS_PASSWORD}" >> /redis-conf/redis.conffi**redis-sentinel /redis-conf/redis.conf $@redis.conf: |port 26379protected-mode nodaemonize nosentinel monitor mymaster 169.169.164.253 6379 2sentinel down-after-milliseconds mymaster 15000sentinel failover-timeout mymaster 60000sentinel deny-scripts-reconfig yessentinel parallel-syncs mymaster 2sentinel auth-pass mymaster somepassword # 删除这行配置
kind: ConfigMap
metadata:labels:app: redis-base-1type: redisname: redis-base-1-sentinel-1namespace: paas-middleware每个哨兵的configmap 都修改下, 有****不带删除线的为新增行
2.2.2 主从节点配置修改
apiVersion: v1
data:redis-docker-entrypoint.sh: |#!/bin/bashif [ ! -f "/redis-conf/redis.conf" ]; thencp /etc/redis/redis.conf /redis-conf/redis.conf**echo -e "masterauth ${REDIS_MASTER_PASSWORD}" >> /redis-conf/redis.confecho -e "requirepass ${REDIS_PASSWORD}" >> /redis-conf/redis.conf**firedis-server /redis-conf/redis.conf $@redis.conf: |bind 0.0.0.0 ::port 6379daemonize noprotected-mode notimeout 300tcp-keepalive 300replica-read-only yesreplica-serve-stale-data yesmaxclients 20000maxmemory 0maxmemory-policy noevictionmasterauth somepassword # 删除此行配置requirepass somepassword # 删除此行配置rename-command FLUSHALL ""dir "/data/"pidfile "/data/redis.pid"logfile "/data/redis.log"
kind: ConfigMap
metadata:labels:app: redis-base-1type: redisname: redis-base-1-masternamespace: paas-middleware所有主从configmap配置文件都修改, 有****不带删除线的为新增行
2.2.3 使用命令行参数指定密码(本小节与上面两小节互斥)
- 以下为哨兵节点configmap 修改
apiVersion: v1
data:redis-docker-entrypoint.sh: |#!/bin/bashif [ ! -f "/redis-conf/redis.conf" ]; thencp /etc/redis/redis.conf /redis-conf/redis.conffiredis-sentinel /redis-conf/redis.conf $@redis.conf: |port 26379protected-mode nodaemonize nosentinel monitor mymaster 169.169.164.253 6379 2sentinel down-after-milliseconds mymaster 15000sentinel failover-timeout mymaster 60000sentinel deny-scripts-reconfig yessentinel parallel-syncs mymaster 2sentinel auth-pass mymaster somepassword # 删除这行配置
kind: ConfigMap
metadata:labels:app: redis-base-1type: redisname: redis-base-1-sentinel-1namespace: paas-middleware每个哨兵的configmap 都修改下, 有****不带删除线的为新增行
- 以下为主从节点configmap 修改
下面为主从节点实例configmap修改,有****不带删除线为新增行
apiVersion: v1
data:
redis-docker-entrypoint.sh: |#!/bin/bashif [ ! -f "/redis-conf/redis.conf" ]; thencp /etc/redis/redis.conf /redis-conf/redis.conffiredis-server /redis-conf/redis.conf $@
redis.conf: |bind 0.0.0.0 ::port 6379daemonize noprotected-mode notimeout 300tcp-keepalive 300replica-read-only yesreplica-serve-stale-data yesmaxclients 20000maxmemory 0maxmemory-policy noevictionmasterauth somepassword # 删除此行配置requirepass somepassword # 删除此行配置rename-command FLUSHALL ""dir "/data/"pidfile "/data/redis.pid"logfile "/data/redis.log"
kind: ConfigMap
metadata:
labels:app: redis-base-1type: redis
name: redis-base-1-master
namespace: paas-middleware
2.3 修改deployment配置参考
2.3.1 master&slaves节点的deployment的yaml修改
所有主从节点配置文件都修改, 有**xxx**为新增行
apiVersion: apps/v1
kind: Deployment
metadata:annotations:
deployment.kubernetes.io/revision: "1"labels:app: redis-base-1type: redisname: redis-base-1-masternamespace: paas-middleware
spec:progressDeadlineSeconds: 600replicas: 1revisionHistoryLimit: 10selector:matchLabels:app: redis-base-1name: redis-base-1-masterservicename: redis-base-1type: rediswithexporter: "yes"strategy:rollingUpdate:maxSurge: 25%maxUnavailable: 25%type: RollingUpdatetemplate:metadata:annotations:prometheus.io/port: "9121"prometheus.io/scrape: "true"labels:app: redis-base-1name: redis-base-1-masterservicename: redis-base-1type: rediswithexporter: "yes"spec:containers:- args:- --replica-announce-ip- 169.169.164.253- --replica-announce-port- "6379"command:- /etc/redis/redis-docker-entrypoint.shimage: harbor.somedomain/paas_middleware/redis-sentinel-main-5.0.8:latestimagePullPolicy: Alwaysname: redis**env:- name: REDIS_PASSWORDvalueFrom:secretKeyRef:name: redis-auth-secretkey: password- name: REDIS_MASTER_PASSWORDvalueFrom:secretKeyRef:name: redis-auth-secretkey: password**ports:- containerPort: 6379name: clientprotocol: TCPresources: {}terminationMessagePath: /dev/termination-logterminationMessagePolicy: FilevolumeMounts:- mountPath: /etc/redis/name: config- mountPath: /dataname: data- mountPath: /redis-confname: actual-config- args:- --redis.addr- redis://localhost:6379- --redis.password- somepassword #密码替换成 $(REDIS_PASSWORD) 变量- **$(REDIS_PASSWORD)**- --web.listen-address- 0.0.0.0:9121image: harbor.somedomain/paas_middleware/redis-sentinel-exporter-5.0.8:latestimagePullPolicy: Alwaysname: redis-exporter**env:- name: REDIS_PASSWORDvalueFrom:secretKeyRef:name: redis-auth-secretkey: password**ports:- containerPort: 9121name: redis-exporterprotocol: TCPresources: {}terminationMessagePath: /dev/termination-logterminationMessagePolicy: FilednsPolicy: ClusterFirstnodeSelector:kubernetes.io/hostname: 10.179.75.111restartPolicy: AlwaysschedulerName: default-schedulersecurityContext: {}terminationGracePeriodSeconds: 30volumes:- configMap:defaultMode: 509name: redis-base-1-mastername: config- hostPath:path: /data/redis/redis-base-1-master/datatype: ""name: data- hostPath:path: /data/redis/redis-base-1-master/redis-conftype: ""name: actual-config
2.3.2 哨兵节点的deployment的yaml修改
所有哨兵节点配置文件都修改, 有****为新增行
apiVersion: apps/v1
kind: Deployment
metadata:annotations:deployment.kubernetes.io/revision: "1"labels:app: redis-base-1type: redisname: redis-base-1-sentinel-1namespace: paas-middleware
spec:progressDeadlineSeconds: 600replicas: 1revisionHistoryLimit: 10selector:matchLabels:app: redis-base-1name: redis-base-1-sentinel-1role: sentineltype: rediswithexporter: "no"strategy:rollingUpdate:maxSurge: 25%maxUnavailable: 25%type: RollingUpdatetemplate:metadata:creationTimestamp: nulllabels:app: redis-base-1name: redis-base-1-sentinel-1role: sentineltype: rediswithexporter: "no"spec:containers:- args:- --sentinel- announce-ip- 169.169.196.242- --replica-announce-port- "26379"command:- /etc/redis/redis-docker-entrypoint.shimage: harbor.somedomain/paas_middleware/redis-sentinel-main-5.0.8:latestimagePullPolicy: Alwaysname: redis**env:- name: REDIS_PASSWORDvalueFrom:secretKeyRef:name: redis-auth-secretkey: password- name: REDIS_MASTER_PASSWORDvalueFrom:secretKeyRef:name: redis-auth-secretkey: password**ports:- containerPort: 26379name: clientprotocol: TCPresources: {}terminationMessagePath: /dev/termination-logterminationMessagePolicy: FilevolumeMounts:- mountPath: /etc/redis/name: config- mountPath: /dataname: data- mountPath: /redis-confname: actual-configdnsPolicy: ClusterFirstnodeSelector:kubernetes.io/hostname: 10.179.75.111restartPolicy: AlwaysschedulerName: default-schedulersecurityContext: {}terminationGracePeriodSeconds: 30volumes:- configMap:defaultMode: 509name: redis-base-1-sentinel-1name: config- hostPath:path: /data/redis/redis-base-1-sentinel-1/datatype: ""name: data- hostPath:path: /data/redis/redis-base-1-sentinel-1/redis-conftype: ""name: actual-config
status:availableReplicas: 1conditions:- lastTransitionTime: "2023-11-09T03:25:41Z"lastUpdateTime: "2023-11-09T03:25:43Z"message: ReplicaSet "redis-base-1-sentinel-1-668c76f9bc" has successfully progressed.reason: NewReplicaSetAvailablestatus: "True"type: Progressing- lastTransitionTime: "2024-07-21T16:48:34Z"lastUpdateTime: "2024-07-21T16:48:34Z"message: Deployment has minimum availability.reason: MinimumReplicasAvailablestatus: "True"type: AvailableobservedGeneration: 3readyReplicas: 1replicas: 1updatedReplicas: 1
2.3.3 使用命令行参数指定密码(本小节与上面两小节互斥)
- 哨兵节点deployment 修改
所有哨兵节点配置文件都修改, 有****不带删除线的为新增行
apiVersion: apps/v1
kind: Deployment
metadata:annotations:deployment.kubernetes.io/revision: "1"labels:app: redis-base-1type: redisname: redis-base-1-sentinel-1namespace: paas-middleware
spec:progressDeadlineSeconds: 600replicas: 1revisionHistoryLimit: 10selector:matchLabels:app: redis-base-1name: redis-base-1-sentinel-1role: sentineltype: rediswithexporter: "no"strategy:rollingUpdate:maxSurge: 25%maxUnavailable: 25%type: RollingUpdatetemplate:metadata:creationTimestamp: nulllabels:app: redis-base-1name: redis-base-1-sentinel-1role: sentineltype: rediswithexporter: "no"spec:containers:- args:- --sentinel- announce-ip- 169.169.196.242- --replica-announce-port- "26379"- --sentinel- auth-pass- mymaster- $(REDIS_PASSWORD)command:- /etc/redis/redis-docker-entrypoint.shimage: harbor.somedomain/paas_middleware/redis-sentinel-main-5.0.8:latestimagePullPolicy: Alwaysname: redisenv:- name: REDIS_PASSWORDvalueFrom:secretKeyRef:name: redis-auth-secretkey: password- name: REDIS_MASTER_PASSWORDvalueFrom:secretKeyRef:name: redis-auth-secretkey: passwordports:- containerPort: 26379name: clientprotocol: TCPresources: {}terminationMessagePath: /dev/termination-logterminationMessagePolicy: FilevolumeMounts:- mountPath: /etc/redis/name: config- mountPath: /dataname: data- mountPath: /redis-confname: actual-configdnsPolicy: ClusterFirstnodeSelector:kubernetes.io/hostname: 10.179.75.111restartPolicy: AlwaysschedulerName: default-schedulersecurityContext: {}terminationGracePeriodSeconds: 30volumes:- configMap:defaultMode: 509name: redis-base-1-sentinel-1name: config- hostPath:path: /data/redis/redis-base-1-sentinel-1/datatype: ""name: data- hostPath:path: /data/redis/redis-base-1-sentinel-1/redis-conftype: ""name: actual-config
status:availableReplicas: 1conditions:- lastTransitionTime: "2023-11-09T03:25:41Z"lastUpdateTime: "2023-11-09T03:25:43Z"message: ReplicaSet "redis-base-1-sentinel-1-668c76f9bc" has successfully progressed.reason: NewReplicaSetAvailablestatus: "True"type: Progressing- lastTransitionTime: "2024-07-21T16:48:34Z"lastUpdateTime: "2024-07-21T16:48:34Z"message: Deployment has minimum availability.reason: MinimumReplicasAvailablestatus: "True"type: AvailableobservedGeneration: 3readyReplicas: 1replicas: 1updatedReplicas: 1
2、以下为主从实例deployment 配置修改
所有主从节点配置文件都修改, 有****不带删除线的为新增行
apiVersion: apps/v1
kind: Deployment
metadata:annotations:
deployment.kubernetes.io/revision: "1"labels:app: redis-base-1type: redisname: redis-base-1-masternamespace: paas-middleware
spec:progressDeadlineSeconds: 600replicas: 1revisionHistoryLimit: 10selector:matchLabels:app: redis-base-1name: redis-base-1-masterservicename: redis-base-1type: rediswithexporter: "yes"strategy:rollingUpdate:maxSurge: 25%maxUnavailable: 25%type: RollingUpdatetemplate:metadata:annotations:prometheus.io/port: "9121"prometheus.io/scrape: "true"labels:app: redis-base-1name: redis-base-1-masterservicename: redis-base-1type: rediswithexporter: "yes"spec:containers:- args:- --replica-announce-ip- 169.169.164.253- --replica-announce-port- "6379"- --**requirepass- $(REDIS_PASSWORD)- -- masterauth- $(REDIS_MASTER_PASSWORD)**command:- /etc/redis/redis-docker-entrypoint.shimage: harbor.somedomain/paas_middleware/redis-sentinel-main-5.0.8:latestimagePullPolicy: Alwaysname: redis**env:- name: REDIS_PASSWORDvalueFrom:secretKeyRef:name: redis-auth-secretkey: password- name: REDIS_MASTER_PASSWORDvalueFrom:secretKeyRef:name: redis-auth-secretkey: password**ports:- containerPort: 6379name: clientprotocol: TCPresources: {}terminationMessagePath: /dev/termination-logterminationMessagePolicy: FilevolumeMounts:- mountPath: /etc/redis/name: config- mountPath: /dataname: data- mountPath: /redis-confname: actual-config- args:- --redis.addr- redis://localhost:6379- --redis.password- somepassword #密码替换成 $(REDIS_PASSWORD) 变量- **$(REDIS_PASSWORD)**- --web.listen-address- 0.0.0.0:9121image: harbor.somedomain/paas_middleware/redis-sentinel-exporter-5.0.8:latestimagePullPolicy: Alwaysname: redis-exporter**env:- name: REDIS_PASSWORDvalueFrom:secretKeyRef:name: redis-auth-secretkey: password**ports:- containerPort: 9121name: redis-exporterprotocol: TCPresources: {}terminationMessagePath: /dev/termination-logterminationMessagePolicy: FilednsPolicy: ClusterFirstnodeSelector:kubernetes.io/hostname: 10.179.75.111restartPolicy: AlwaysschedulerName: default-schedulersecurityContext: {}terminationGracePeriodSeconds: 30volumes:- configMap:defaultMode: 509name: redis-base-1-mastername: config- hostPath:path: /data/redis/redis-base-1-master/datatype: ""name: data- hostPath:path: /data/redis/redis-base-1-master/redis-conftype: ""name: actual-config
2.3.4 镜像环境变量参考
https://hub.docker.com/r/bitnami/redis#configuration
https://github.com/oliver006/redis_exporter#flags
三、测试是否生效
Master节点
Slave节点
哨兵节点
测试redis-sentinel-exporter 指标抓取
四、 注意事项
- 所有节点configmap和deployment yaml 配置文件都按照上面修改别遗漏
- 修改完先在测试环境验证没有问题,再连接到连接哨兵集群进行读写测试
相关文章:
K8S下redis哨兵集群使用secret隐藏configmap内明文密码方案详解
#作者:朱雷 文章目录 一、背景环境及方案说明1.1、环境说明1.2、方案一:使用配置文件设置密码1.3、方案二:使用args 的命令行传参设置密码 二、redis secret configmap deployment参考2.1 创建secret-redis.yaml参考2.2 修改configmap配置参…...
插槽slot
在 Vue 中,插槽(slot)主要用于实现父组件向子组件传递内容,是一种典型的父传子的方式 元素是一个插槽出口 (slot outlet),标示了父元素提供的插槽内容 (slot content) 将在哪里被渲染。 默认插槽 在外部没有提供任何…...
BFS 解决 FloodFill 算法(典型算法思想)—— OJ例题算法解析思路
目录 一、733. 图像渲染 - 力扣(LeetCode) 算法代码: 算法思路 基础参数 函数入口 检查条件 初始化 BFS BFS 填充过程 返回结果 复杂度分析 总结 二、200. 岛屿数量 - 力扣(LeetCode) 算法代码:…...
8 SpringBootWeb案例(上): 查询【分页功能(分页插件)】、删除、新增、修改
文章目录 前言:SpringBootWeb案例1. 准备工作1.1 需求&环境搭建1.1.1 需求说明1.1.2 环境搭建1.2 开发规范1.2.1 开发规范-REST(不强求非要这种风格,传统风格有时候更方便)1.2.2 开发规范-统一响应结果和异常处理1.2.3 开发流程2. 部门管理2.1 查询部门2.1.1 原型和需求…...
Docker 部署 Dify:轻松集成 Ollama 和 DeepSeek
1 Ollama的安装及使用 1.1 什么是Ollama? Ollama 是一个用于本地部署和运行大型语言模型的框架。 Ollama 的作用包括: 本地模型运行:Ollama 允许在本地机器上运行大型语言模型(如 LLaMA、DeepSeek 等),无…...
深入解析MySQL索引:本质、分类、选择及使用原则
一、索引的本质 索引,作为数据库中的一种核心数据结构,其本质在于通过改变数据结构来加快查询效率。可以将索引理解为数据库中的一种“目录”或“路标”,它帮助数据库系统快速定位到需要查询的数据行,从而大大提高数据检索的速度…...
MYSQL的第一次
目录 前情提要 题目解析 连接并使用数据库 创建employees表 创建orders表? 创建invoices表?? ?查看建立的表 前情提要 需要下载mysql并进行配置,建议下载8.0.37,详情可见MySQL超详细安装配置教程(亲测有效)_mysql安装教程-CSDN博客 题目解析…...
机器学习笔记——常用损失函数
大家好,这里是好评笔记,公主号:Goodnote,专栏文章私信限时Free。本笔记介绍机器学习中常见的损失函数和代价函数,各函数的使用场景。 热门专栏 机器学习 机器学习笔记合集 深度学习 深度学习笔记合集 文章目录 热门…...
谷粒商城学习笔记-13-配置git-ssh-配置代码免密提交
安装配置 git 1 、下载 git : https://git-scm.com 下载git客户端,右键桌面Git GUI/bash Here。进入bash 2 、配置 git ,进入 git bash # 配置用户名 git config --global user.name "username" //(名字,随意写)# …...
51单片机学习——静态数码管显示
1. 数码管介绍 LED数码管:数码管是一种简单、廉价的显示器,是由多个发光二极管封装在一起组成“8”字型的器件。 2. 数码管引脚定义 LED的阴极连接到一个端口上是共阴极连接,称为共阴极数码管。LED的阳极连接到一个端口上是共阳极连接&…...
Qt5 C++ TcpSocket 如何判断是服务主动断开tcp socket连接?
文章目录 实现思路示例代码代码解释主要功能和用法注意事项 在 Qt 5.9.9 的 C 开发中,使用 QTcpSocket 时,要判断是服务端主动断开 TCP Socket 连接,可以通过处理 QTcpSocket 的 disconnected 信号,结合 QTcpSocket 的状态以及…...
UEFI Spec 学习笔记---9 - Protocols — EFI Loaded Image
本节定义EFI_LOADED_IMAGE_PROTOCOL和 EFI_LOADED_IMAGE_DEVICE_PATH_PROTOCOL。这些协议分别描述了已加载到内存中的映像,并指定了PE/COFF映像通过EFI引导服务LoadImage()加载 时使用的设备路径。这些描述包括 load image 的源、映像在内存中的当前位置、为image分…...
Deepseek 与 ChatGPT:AI 浪潮中的双子星较量
引言 在人工智能飞速发展的当下,AI 语言模型成为了人们关注的焦点。Deepseek 与 ChatGPT 作为其中的佼佼者,各自展现出独特的魅力,引领着 AI 技术的发展潮流。今天,就让我们深入探讨这两款模型,看看它们在 AI 领域中是…...
open-webui安装
docker安装openwebui 拉取镜像 docker pull ghcr.io/open-webui/open-webui:maindocker images启动 docker run -d -p 8346:8080 --name open-webui ghcr.io/open-webui/open-webui:maindocker ps查看端口占用 lsof -i:8346访问地址 http://ip:port http://127.0.0.1:8346...
docker 安装jenkins
使用docker 容器安装jenkins比较方便,但是细节比较重要,这里实战安装了一遍,可用: 拉取最新的jenkins镜像 docker pull jenkins/jenkins 如果没有翻墙的话,可以会有下面的报错: Error response from dae…...
前端利器:DateUtils 日期时间工具深度剖析
序言 在前端开发中,日期和时间的处理是一个常见且重要的任务。从格式化日期展示到复杂的日期计算,每一个环节都需要精确和高效的代码支持。今天,我们就来深入探讨一个精心打造的前端日期时间工具类 DateUtils,它涵盖了从基础的日…...
Denoising Diffusion Restoration Models论文解读
论文要点 恢复的线性逆问题可以使用预训练的DDPM完成:1. 将降质矩阵使用SVD,得到分解矩阵;2. 使用分解矩阵将图像投影到降质类型间共享的谱空间;3. 谱空间中执行DDPM。 评价 同Track的方法同样很多,比如后续的DDNM、…...
【Windows API】SetFilePointerEx函数用法介绍
目录 一、函数概述 二、函数原型与参数解析 1. hFile(文件句柄) 2. liDistanceToMove(移动距离) 3. lpNewFilePointer(新指针位置) 4. dwMoveMethod(移动基准点) 三、返回值与…...
uniapp uni.request重复请求处理
类似这种切换tab时,如果操作很快并且网络不太好,就出现数据错乱,在网上查了一圈,有一个使用uview拦截处理的,但是原生uni.requse没有找到详细的解决办法,就查到使用 abort 方法,我自己封装了一个…...
unity学习47:寻路和导航,unity2022后版本如何使用 Navmesh 和 bake
目录 1 寻路和导航对移动的不同 1.1 基础的移动功能 1.1.1 基础移动 1.1.2 智能导航寻路 1.1.3 智能导航寻路还可以 2 如何实现这个效果? 2.1 通过地图网格的形式 2.1.1 警告信息 the static value has been deprecated的对应搜索 2.1.2 新的navigation ba…...
Windows安装node.js详细教程
一、什么是node.js Node.js 是一个基于 Chrome V8 引擎的javascript运行环境。 Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型。 Node 是一个让 JavaScript 运行在服务端的开发平台,它让javascript成为与PHP、Python等服务端语言平起平坐的脚步语言。 由 Rya…...
大模型领域常见的专业术语和关键词及简要解释
现在大语言模型非常火热,特别是deepseek,想要了解、学习、应用、设计开发大模型,则我们需要先知道大模型邻域都包含哪些方面,以及在大模型领域的各个方面,都有哪些常见的专业术语和关键词。 以下我们从大模型领域的模型架构、训练方法到优化技术、应用和伦理问题等多个方…...
单细胞转录组画小提琴VlnPlot只显示需要类型细胞
探序基因肿瘤研究院 整理 在R语言中,单细胞转录组数据画小提琴图中,我们如果想只展示出需要的特定细胞类型,可以把这需要展示的细胞类型单独构建成一个Seurat对象,再画图。 例如我们在Seurat对象中的meta.data表格中,…...
UE 播放视频
一.UI播放视频 1.导入视频文件至工程文件夹 2.文件夹内右健选择Media -> File Meida Source创建testFileMeidaSource文件。 编辑FilePath为当前视频 3.右键->Media->Media Player 创建testMediaPlayer文件 4.右键创建testMediaTexture。编辑MediaPlayer设置testMedia…...
当pcie设备变化时centos是否会修改网络设备的名称(AI回答)
当pcie设备变化时centos是否会修改网络设备的名称 在CentOS(以及其他基于Linux的操作系统)中,网络接口的命名通常遵循特定的规则,尤其是在使用PCIe设备(如网络适配器)时。网络接口的命名通常基于设备的物理…...
SpringSecurity基于配置方法控制访问权限:MVC匹配器、Ant匹配器
Spring Security 是一个功能强大且高度可定制的身份验证和访问控制框架。在 Spring Security 中,可以通过配置方法来控制访问权限。认证是实现授权的前提和基础,在执行授权操作前需要明确目标用户,只有明确目标用户才能明确它所具备的角色和权…...
《养生》(二)
一、基础生活调整 1.作息规律 固定每天7-8小时睡眠,尽量22:30前入睡,晨起后拉开窗帘晒太阳5分钟,调节生物钟 2.饮食优化 三餐定时,每餐细嚼慢咽20次以上,优先吃蔬菜和蛋白质(如鸡蛋、豆腐&#x…...
本地部署MindSearch(开源 AI 搜索引擎框架),然后上传到 hugging face的Spaces——L2G6
部署MindSearch到 hugging face Spaces上——L2G6 任务1 在 官方的MindSearch页面 复制Spaces应用到自己的Spaces下,Space 名称中需要包含 MindSearch 关键词,请在必要的步骤以及成功的对话测试结果当中 实现过程如下: 2.1 MindSearch 简…...
STM32 看门狗
目录 背景 独立看门狗(IWDG) 寄存器访问保护 窗口看门狗(WWDG) 程序 独立看门狗 设置独立看门狗程序 第一步、使能对独立看门狗寄存器的写操作 第二步、设置预分频和重装载值 第三步、喂狗 第四步、使能独立看门狗 喂狗…...
Ansys Motor-CAD:热分析
您好,汽车迷: 在这篇博客中,我将讨论如何使用 Ansys Motor-CAD 中的热物理模型对 IPM 电机进行热分析。我展示了可以应用的各种冷却系统,并演示了一些计算方法,包括稳态、简单瞬态和占空比。 热物理和设置 选择热物理…...
Swagger 转 Word 技术方案
项目概述 本项目旨在提供一种便捷的工具,将 Swagger API 文档转换为 Word 文档,方便开发人员和团队进行文档管理和分享。通过简单的配置和操作,用户可以快速生成包含 API 接口信息、请求参数、返回参数等内容的 Word 文档。 技术架构 本项目基于 Java 开发,采用 Spring …...
对CSS了解哪些?
CSS(Cascading Style Sheets,层叠样式表)是用来描述HTML文档外观和布局的语言。以下是对CSS的常见了解范围: 1. CSS 基础 选择器:如通用选择器 (*)、类型选择器、类选择器 (.class)、ID选择器 (#id)、后代选择器、伪类…...
使用 Docker-compose 部署 MySQL
使用 Docker Compose 部署 MySQL 本文将详细指导如何使用 docker-compose 部署 MySQL,包括基本配置、启动步骤、数据持久化以及一些高级选项。通过容器化部署 MySQL,你可以快速搭建一个隔离的数据库环境,适用于开发、测试或小型生产场景。 关…...
【C语言】指针(5)
前言:上篇文章的末尾我们使用了转移表来解决代码冗余的问题,那我们还有没有什么办法解决代码冗余呢?有的这就是接下来要说的回调函数。 往期文章: 指针1 指针2 指针3 指针4 文章目录 一,回调函数二,qsort实现快速排序1…...
go~为什么会有json.Number这种类型存在
解决 JSON 数值类型的不确定性 在 JSON 格式里,数值类型没有明确区分整数和浮点数,一个数值可能是整数(如 123),也可能是浮点数(如 123.45)。而在 Go 语言中,整数(如 in…...
Jmeter连接数据库、逻辑控制器、定时器
Jmeter直连数据库 直接数据库的使用场景 直连数据库的关键配置 添加MYSQL驱动Jar包 方式一:在测试计划面板点击“浏览”按钮,将你的JDBC驱动添加进来 方式二:将MySQL驱动jar包放入到lib/ext目录下,重启JMeter 配置数据库连接信…...
DeepSeek智能测试助手:分类+推理+导出一站式工具
前言 测试开发工程师在日常工作中需要处理大量测试文档,并且这些文档需要被高效分类、清洗和管理,同时结合强大的 AI 推理能力(如 DeepSeek 模型)进行智能化处理和分析。为此,我们开发了一款基于 PyQt5 的 GUI 工具&a…...
20250220找回Ubuntu22.04中丢失的文件管理器
20250220找回Ubuntu22.04中丢失的文件管理器 2025/2/20 18:05 在Ubuntu20.04.6中 生产服务器上 强制安装deb安装包的时候,把 桌面显示搞丢了。 Ubuntu的桌面用得少,但是没有还是挺不方便的,一通操作,桌面回来了。还是有很多/不少功…...
IMX6ULL的公板的以太网控制器(MAC)与物理层(PHY)芯片(KSZ8081RNB)连接的原理图分析(包含各引脚说明以及工作原理)
目录 什么叫以太网?它与因特网有何区别?公板实现以太网的原理介绍(MII/RMII协议介绍)公板的原理图下载地址公板中IMX6ULL处理器与MAC(以太网控制器)有关的原理图IMX6ULL处理器的MAC引脚说明1. **ENET1_TX_DATA0**2. **ENET1_TX_DATA1**3. **ENET1_TX_EN*…...
一周学会Flask3 Python Web开发-request请求对象与url传参
锋哥原创的Flask3 Python Web开发 Flask3视频教程: 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili request请求对象封装了从客户端发来的请求报文信息,我们可以从中获取所有数据。 request对象包含的常用属性&…...
2024年国赛高教杯数学建模C题农作物的种植策略解题全过程文档及程序
2024年国赛高教杯数学建模 C题 农作物的种植策略 原题再现 根据乡村的实际情况,充分利用有限的耕地资源,因地制宜,发展有机种植产业,对乡村经济的可持续发展具有重要的现实意义。选择适宜的农作物,优化种植策略&…...
WEB前端将指定DOM生成图片并下载最佳实践(html2canvas)
前言: html2canvas 是一个 JavaScript 库,其主要作用是将 HTML 元素或其部分内容渲染为 Canvas 图像。通过它,开发者可以将网页中的任意 DOM 元素(包括文本、图片、样式等)转换为图片格式(如 PNG 或 JPEG&…...
C# 十六进制字符串转换为十进制
在 C# 中,将十六进制(Hexadecimal)字符串转换为十进制(Decimal)整数非常简单。以下是几种常见的方法: 方法 1: 使用 Convert.ToInt32 Convert.ToInt32 方法可以直接将十六进制字符串转换为十进制整数。 示…...
第4章 信息系统架构(三)
4.3 应用架构 应用架构的主要内容是规划出目标应用分层分域架构,根据业务架构规划目标应用域、应用组和目标应用组件,形成目标应用架构逻辑视图和系统视图。从功能视角出发,阐述应用组件各自及应用架构整体上,如何实现组织的高阶…...
Qt 保留小数点 固定长度 QString 格式化
QString的arg()函数格式化输出double类型数值,包括fieldWidth、fmt、prec和fillChar参数的作用。示例代码展示了如何设置精度和填充字符,以及字段宽度的影响。文中提到,当fieldWidth小于实际长度时,前面的填充不会被截断。此外&am…...
亲测可用,IDEA中使用满血版DeepSeek R1!支持深度思考!免费!免配置!
作者:程序员 Hollis 之前介绍过在IDEA中使用DeepSeek的方案,但是很多人表示还是用的不够爽,比如用CodeChat的方案,只支持V3版本,不支持带推理的R1。想要配置R1的话有特别的麻烦。 那么,今天,给…...
AI训练中的常用指令
以下是一些常用于深度学习训练的 Linux 指令,可以帮助你高效管理和执行训练任务: 文件管理 查看当前目录内容:ls进入目录:cd 路径/到/目录创建新目录:mkdir 新目录名称删除文件或目录: 删除文件ÿ…...
汽车同轴供电(PoC)电感器市场报告:未来几年年复合增长率CAGR为14.3%
汽车同轴供电(PoC)系统旨在通过同轴电缆传输电力和数据。 该技术适用于各种汽车应用,如摄像头系统、传感器和其他需要通过单根电缆传输电力和数据的车载设备。 汽车 PoC 系统中的电感器有多种用途,包括能量存储:电感器…...
C++中间件DDS介绍
C DDS 库简介 DDS(Data Distribution Service) 是一种用于实时分布式系统通信的中间件标准,由 OMG(Object Management Group) 提出。它是一种发布/订阅(Publish/Subscribe)模式的数据通信框架&…...
强化学习笔记
强化学习的总体目标:寻找最优策略。 关键名词 智能体(Agent) 状态(State):智能体相对于环境的状态 s ∈ S s∈S s∈S 状态空间(State space):把所有状态放在一起&…...