redis7单节点、主从、哨兵、集群的安装和配置

news2024/12/23 20:44:54

redis7安装和配置

2022年4月份正式发布的redis 7.0,是目前历史上变化最大的版本,有超过50个以上的新增命令

官网:

https://redis.io

中文镜像

http://redis.cn

中文学习网:

https://redis.com.cn/

redis版本,建议升级到6.0.8版本以上,防止出现安全问题

安装

查看自己的服务器操作系统位数,确保是64位:

getconf LONG_BIT

查看GCC版本,redis由C编写,所以需要由GCC环境

[root@psh redis-7.0.11]# gcc -v

使用内建 specs。
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/4.8.5/lto-wrapper
目标:x86_64-redhat-linux
配置为:../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-linker-hash-style=gnu --enable-languages=c,c++,objc,obj-c++,java,fortran,ada,go,lto --enable-plugin --enable-initfini-array --disable-libgcj --with-isl=/builddir/build/BUILD/gcc-4.8.5-20150702/obj-x86_64-redhat-linux/isl-install --with-cloog=/builddir/build/BUILD/gcc-4.8.5-20150702/obj-x86_64-redhat-linux/cloog-install --enable-gnu-indirect-function --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux
线程模型:posix
gcc 版本 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC)

下载安装包后,解压到自定义目录目录

cd /usr/local

tar -xzvf redis-7.0.11.tar.gz 

进入redis目录

cd /usr/local/redis-7.0.11

请添加图片描述

执行安装命令

make && make install

出现It's a good idea to run 'make test' ;说明安装成功

请添加图片描述

执行默认安装,会安装在

/usr/local/bin 

文件说明

  • redis-benchmark 性能测试工具
  • redis-check-aof 修复由问题的aof文件
  • redis-check-rdb 修复由问题的dump.rdb文件
  • redis-cli 客户端入口
  • redis-sentinel redis集群
  • redis-server redis 服务器启动命令

修改redis的配置文件:

cd /usr/local/redis-7.0.11
-- 备份原本的配置文件,防止配置错误
cp redis.conf /usr/local/redis-7.0.11/myredis.conf

vim myredis.conf

-- 查看文件的行数
set nu

做以下修改

vim /usr/local/redis-7.0.11/myredis.conf

将 daemonize no 改为 yes ,可以作为服务器后台启动

将 protected-mode yes 改为 no ,关闭保护模式

将bind 127.0.0.1 -::1 注释掉,否则只能本机访问

设置redis密码: requirepass  123456


开放端口

 firewall-cmd --zone=public --add-port=6379/tcp --permanent
 
firewall-cmd --reload #重启
firewall systemctl stop firewalld.service #停止
firewall systemctl disable firewalld.service #禁止firewall开机启动

redis服务器启动

/usr/local/bin/redis-server /usr/local/redis-7.0.11/myredis.conf

redis客户端启动

/usr/local/bin/redis-cli 

redis设置密码后,不使用密码也能登录,但是无法操作,会提示没有授权

请添加图片描述

可以使用 ./redis-cli -a 123456 ,带密码登录,会提示这样不安全,但是可以正常使用

请添加图片描述

也可以先连接,在授权,这样就没有警告了

请添加图片描述

关闭

在redis客户端直接使用 shutdown 就可以关闭服务器,然后在退出即可
127.0.0.1:6379> shutdown
not connected> quit

或者
/usr/local/bin/redis-cli -a 123456 shutdown

新建一个系统服务文件:

vi /etc/systemd/system/redis.service

[Unit]
Description=redis-server
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/bin/redis-server /usr/local/redis-7.0.11/myredis.conf
PrivateTmp=true

[Install]
WantedBy=multi-user.target
重载系统服务	systemctl daemon-reload

启动	systemctl start redis

停止	systemctl stop redis

重启	systemctl restart redis

查看状态	systemctl status redis

设置开机自启动	systemctl enable redis

配置RDB

vim /usr/local/redis-7.0.11/myredis.conf

redis7以前

# save m n  表示m秒内数据集存在n次修改,就会触发bgsave ,进行RDB持久化
save 900 1
save 300 10
save 60 10000

redis7对RDB的持久化规则做出了修改

# 默认为:
save 3600 1 300 100 60 10000

#为了方便测试,本地调整为:
save 60 100

#rdb文件路径默认为 dir ./  ,为了方便查看,文件夹设置为:(这里的文件夹不能为空)
mkdir dumpfiles
dir /usr/local/redis-7.0.11/dumpfiles

# 如果有当前机器有多个redis实例,建议修改rdb文件名称,这里没有改
dbfilename dump.rdb

重启redis,执行save,查看 /usr/local/redis-7.0.11/dumpfiles文件夹,存在rdb文件

  • 自动触发,达到配置文件中自动保存的频次
  • 手动触发:调用save、bgsave命令,save阻塞,bgsave不阻塞

RDB文件修复

/usr/local/bin/redis-check-rdb   /usr/local/redis-7.0.11/dumpfiles/dump.rdb

禁用rdb

# 只在本次运行过程中禁用rdb
/usr/local/bin/redis-cli config set  save ""

# 更改配置文件
save ""

配置AOF

开启AOF

vim /usr/local/redis-7.0.11/myredis.conf

# 把appendonly no 改为 yes
appendonly yes 

设置aof文件的路径

# 在redis6,aof保存文件的位置和RBD保存文件的位置一样,都是通过redis.conf配置文件的dir配置


# 在redis7的时候,新增了配置 appenddirname 配置,专门用来配置aof文件的保存位置,这里是在RDB文件下在新建appendonlydir文件夹
appenddirname "appendonlydir"

aof文件在redis6的时候是只有一个 appendonly.aof文件

在redis7的时候变成了三个

  • appendonly.aof..base.rdb 是基础aof文件,由子进程通过重写产生,该文件最多只有一个
  • appendonly.aof..incr.aof 是增量的aof文件,在aof重写的时候产生,可能会存在多个
  • appendonly.aof..history.aof 是历史的aof,由base和incr变化而来,每次aof重写完成,之前的base和incr 都会变为history,history类型的aof文件是会被自动删除的
  • appendonly.aof.manifest 清单文件用来跟踪和管理这些aof文件,方便定位和查找

aof的修复命令,注意文件名

/usr/local/bin/redis-check-aof --fix  /usr/local/redis-7.0.11/dumpfiles/appendonlydir/appendonly.aof.1.incr.aof

配置主从

主从复制

  • 可以配置到配置文件

    • -- 只配从库不配主库
      replicaof 主库ip 主库端口号
      
  • 也可以使用命令的方式临时切换

    • SLAVEOF 主库ip 主库端口号
      
      SLAVEOF  192.168.158.168  6380
      
  • 把自己切换为主机

    SLAVEOF no one 
    

这里的两台从机都是从已经配置好rdb和aof的主机拷贝过来的,所以就不在配aof和rdb

需要保证服务器间可以ping通,防火墙对应端口可以访问

vim /usr/local/redis-7.0.11/myredis.conf

修改从机的端口号

port 6380

修改进程id,可以不改,不会对主从造成影响,但是有歧义

pidfile /var/run/redis_6380.pid

修改日志文件目录(主从机都需要改)

logfile "/usr/local/redis-7.0.11/mylogs/redislog.log"

mkdir /usr/local/redis-7.0.11/mylogs

修改密码(最好主从机都改,可以只改主机)

requirepass 123456

配置主机,和从机访问主机的密码,这里主机不用配(如果要配置哨兵,主节点也要配)

replicaof  192.168.158.167  6379

masterauth "123456"

给从机开放新的端口

firewall-cmd --zone=public --add-port=6380/tcp --permanent
 
firewall-cmd --reload #重启
firewall systemctl stop firewalld.service #停止
firewall systemctl disable firewalld.service #禁止firewall开机启动

firewall-cmd --zone=public --add-port=6381/tcp --permanent

配置哨兵

记得配置主机的,从机访问主机的密码

vim /usr/local/redis-7.0.11/myredis.conf

masterauth "123456"

进入哨兵机器

cd /usr/local/

#上传redis压缩包,并解压

tar -xzvf redis-7.0.11.tar.gz 

#在三台哨兵上分别安装redis,参考上面redis的安装,不需要对redis配置文件进行修改

备份 sentinel.conf 配置文件,防止意外出现

cd /usr/local/redis-7.0.11

cp sentinel.conf sentinel.conf.bak

修改三台哨兵的配置文件

 vim sentinel.conf
 # 或者使用sz sentinel.conf ,把文件下载到本机进行编辑,最后再上传服务器
bind 0.0.0.0

# 默认就是关闭保护模式
protected-mode no

# 默认端口
port 26379
# 改为yes,可以后台启动
daemonize yes
# 进程id可以不改
pidfile /var/run/redis-sentinel.pid
# 日志文件位置
logfile "/usr/local/redis-7.0.11/sentinel.log"
# 工作目录, 要手动创建对应的文件夹 mkdir  dir
dir /usr/local/redis-7.0.11/dir  
# 设置要监控的服务器,参数为: masterName 主机的ip 主机端口  法定投票数(表示最少需要多少个哨兵认为客观下线,同意故障迁移)
sentinel monitor mymaster 192.168.158.167  6379 2
# 接主节点的密码
sentinel auth-pass mymaster 123456


# 以下配置使用默认即可
# 主节点多少毫秒没有应答哨兵,哨兵就会主观上认为主节点下线
sentinel down-after-milliseconds mymaster 30000

# 故障转移的超时时间
sentinel failover-timeout mymaster 180000


开放端口

 firewall-cmd --zone=public --add-port=26379/tcp --permanent
 
firewall-cmd --reload #重启
firewall systemctl stop firewalld.service #停止
firewall systemctl disable firewalld.service #禁止firewall开机启动

启动哨兵

/usr/local/bin/redis-sentinel   /usr/local/redis-7.0.11/sentinel.conf --sentinel 

查看集群状态

info – Replication

关闭主机点,哨兵的选举日志如下:

请添加图片描述

启用哨兵后,哨兵会对redis的配置文件进行重写

请添加图片描述

配置集群

集群配置:3主3从,为了节约资源,每个redis服务器启动两个redis实例,共需要3台服务器,一个以6380启动,一个以6381启动

mkdir /usr/local/redis-7.0.11/cluster

redis会根据制定的配置文件进行启动,在每个服务器上,新建两个集群的配置文件,并修改redis集群配置文件

cd /usr/local/redis-7.0.11/cluster/

vim  /usr/local/redis-7.0.11/cluster/redisCluster6381.conf

vim  /usr/local/redis-7.0.11/cluster/redisCluster6382.conf

文件内容

  • 6381
bind 0.0.0.0

# 默认就是关闭保护模式
protected-mode no

# 默认端口
port 6381
# 改为yes,可以后台启动
daemonize yes
# 进程id可以不改
pidfile /var/run/redis-6381.pid
# 日志文件位置
logfile "/usr/local/redis-7.0.11/redis6381.log"
# 工作目录, 要手动创建对应的文件夹 mkdir  dir
dir /usr/local/redis-7.0.11/cluster
# RDB
dbfilename dump6381.rdb
# aof
appendonly yes 
appenddirname "appendonly6381.aof"


requirepass  123456
masterauth  123456

# 打开集群
cluster-enabled yes
# 集群的配置文件
cluster-config-file nodes-6381.conf
cluster-node-timeout 5000

  • 6382
bind 0.0.0.0

# 默认就是关闭保护模式
protected-mode no

# 默认端口
port 6382
# 改为yes,可以后台启动
daemonize yes
# 进程id可以不改
pidfile /var/run/redis-6382.pid
# 日志文件位置
logfile "/usr/local/redis-7.0.11/redis6382.log"
# 工作目录, 要手动创建对应的文件夹 mkdir  dir
dir /usr/local/redis-7.0.11/cluster
# RDB
dbfilename dump6382.rdb
# aof
appendonly yes 
appenddirname "appendonly6382.aof"


requirepass  123456
masterauth  123456

# 打开集群
cluster-enabled yes
# 集群的配置文件
cluster-config-file nodes-6382.conf
cluster-node-timeout 5000

开放端口

firewall-cmd --zone=public --add-port=6381/tcp --permanent
firewall-cmd --zone=public --add-port=6382/tcp --permanent
 
firewall-cmd --reload #重启
firewall systemctl stop firewalld.service #停止
firewall systemctl disable firewalld.service #禁止firewall开机启动

启动

/usr/local/bin/redis-server /usr/local/redis-7.0.11/cluster/redisCluster6381.conf

/usr/local/bin/redis-server /usr/local/redis-7.0.11/cluster/redisCluster6382.conf

开机自启

变更系统服务文件,因为使用集群了,之前自启的单节点就不要开机自启了:

vi /etc/systemd/system/redis.service

[Unit]
Description=redis-server
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/bin/redis-server /usr/local/redis-7.0.11/cluster/redisCluster6381.conf
PrivateTmp=true

[Install]
WantedBy=multi-user.target
vi /etc/systemd/system/redis01.service

[Unit]
Description=redis01-server
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/bin/redis-server /usr/local/redis-7.0.11/cluster/redisCluster6382.conf
PrivateTmp=true

[Install]
WantedBy=multi-user.target
重载系统服务	systemctl daemon-reload

启动	systemctl start redis

停止	systemctl stop redis

重启	systemctl restart redis

查看状态	systemctl status redis

设置开机自启动	systemctl enable redis  	systemctl enable redis01
		

构建集群关系

执行以下命令创建集群,出现确认选项,输入yes

 --cluster-replicas 1 表示给每个master创建一个slave

/usr/local/bin/redis-cli -a 123456 --cluster create --cluster-replicas 1 192.168.158.167:6381  192.168.158.167:6382  192.168.158.168:6381  192.168.158.168:6382 192.168.158.169:6381  192.168.158.169:6382

本次用到的ip:port

192.168.158.167:6381 192.168.158.167:6382

192.168.158.168:6381 192.168.158.168:6382

192.168.158.169:6381 192.168.158.169:6382

此时创建集群会出现一直等待的情况,因为没有开放总线端口

集群总线

  • 每个Redis集群中的节点都需要打开两个TCP连接。一个连接用于正常的给Client提供服务,比如6379,还有一个额外的端口(通过在这个端口号上加10000)作为数据端口,例如:redis的端口为6379,那么另外一个需要开通的端口是:6379 + 10000, 即需要开启 16379。16379端口用于集群总线,这是一个用二进制协议的点对点通信信道。这个集群总线(Cluster bus)用于节点的失败侦测、配置更新、故障转移授权,等等。
firewall-cmd --zone=public --add-port=16381/tcp --permanent
firewall-cmd --zone=public --add-port=16382/tcp --permanent
 
firewall-cmd --reload #重启
firewall systemctl stop firewalld.service #停止
firewall systemctl disable firewalld.service #禁止firewall开机启动

开放端口后创建集群需要删除以下文件,重新创建集群

cd /usr/local/redis-7.0.11/cluster

rm -rf  dump6382.rdb
rm -rf  dump6381.rdb
rm -rf  nodes-6381.conf
rm -rf  nodes-6382.conf
rm -rf  appendonly6381.aof
rm -rf  appendonly6382.aof

集群创建成功

请添加图片描述
请添加图片描述

查看集群关系

cluster nodes

集群的主从情况需要看集体分配

请添加图片描述

查看集群环境

cluster info

集群的上下线

连接集群是要加 c ,把key路由到正确的节点,如下图会把key路由到指定的节点

/usr/local/bin/redis-cli  -a 123456  -p 6381 -c

请添加图片描述

cluster nodes 查看集群情况,当前节点是主节点,关闭主节点,再次查看集群情况,发现原本的主节点连接不上了,而且选举出了新的主节点

请添加图片描述

重启之前的主节点,再次查看集群情况,之前的主节点变成了从节点

请添加图片描述

手动故障转移,或者节点丛属关系的调整

# 登录到刚才宕机的主节点
/usr/local/bin/redis-cli  -a 123456  -p 6382 -c

# 恢复原有集群结构
cluster failover

cluster nodes

请添加图片描述

集群的扩容缩容

扩容

把新节点加入集群

/usr/local/bin/redis-cli  -a 123456 --cluster  add-node  ip:port 

重新分配槽位

/usr/local/bin/redis-cli   -a 123456 --cluster reshard ip:port 
# 执行上面的命令后,还需要输入要迁移的槽的个数和目标节点的id
# 重新分配的成本很高,所以当有新节点加入集群,重新划分槽实际上是之前每一个主节点都分出一部分槽给新的主节点,而不是全部重新分配

为新的主节点分配从节点

/usr/local/bin/redis-cli  -a 123456 --cluster  add-node   新从节点ip:port  新主节点ip:port --cluster-salve      --cluster-master-id  新主节点id

缩容

先清除从节点

/usr/local/bin/redis-cli  -a 123456 --cluster  del-node  从节点ip:port  从节点id

主节点归还槽号

/usr/local/bin/redis-cli   -a 123456 --cluster reshard ip:port 

在清除主节点

/usr/local/bin/redis-cli  -a 123456 --cluster  del-node  主节点ip:port  主节点id

可视化工具的安装下载

下载地址

https://github.com/RedisInsight/RedisDesktopManager/releases

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/758629.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring初识(一)

一.Spring 是什么? 首先我们来看看官网的解释 Spring 使每个人都可以更快、更轻松、更安全地进行 Java 编程。Spring 对速度、简单性和生产力的关注使其成为 世界上最受欢迎的 Java框架。 这里我简单的说明一下什么是spring? 我们通常所说的 Spring 指的是 Sprin…

纯CSS实现的卡片切换效果

纯CSS实现的卡片切换效果 无需JS就可以实现限于纯静态页面产品展示不需要轮播,自动切换 示例代码 <template><div class"example-css-tab"><div class"container dwo"><div class"card"><input type"radio"…

(续2)选择屏幕

分页签组件 表单控件 双击空白处----出现右侧编辑框 其中 fixed的意思是固定几列。 可修改 回车会自动复原 回车会自动复原 原因 在pai中检查字段却没有做任何操作。 打算新建一个表单 表单中指定选择行. 按钮扩展. 执行后 修改列名. 创建一个moudle 修改后不会复原. …

前端卷算法系列(七)

前端卷算法系列&#xff08;六&#xff09; 删除有序数组中的重复项 给你一个 升序排列 的数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使每个元素 只出现一次 &#xff0c;返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯…

用 pesq 给 soundfile 读取的录音数据打分

音频文件来源 NOIZEUS: Noisy speech corpus - Univ. Texas-Dallas 很多python库都能计算pesq分数&#xff0c;如pypesq跟pesq两个库&#xff0c;这里讲的的是pesq的库 import soundfile as sf from pesq import pesq# 读取音频文件 audio_clean, src sf.read(./audio/NOIZE…

[南京大学]-[软件分析]课程学习笔记(三)-数据流分析

Data Flow Analysis Overview of Data Flow Analysis may analysis: outputs information that may be true(over-approximation) 可能正确&#xff0c;超出近似over-approximationmust analysis: outputs information that must be true (under-approximation) 必须正确&…

WPF RadioButton单选失效

文章目录 前言解决方案 前言 我最近在照着教程敲代码&#xff0c;WPF深入讲解第8集。发现RadioButton按钮点击触发器不是单选的。WPF中单选和复选通过RadioButton和CheckButton来进行区分。我点击另一个RadioButton之后&#xff0c;之前的Radiobutton没有取消选择。 解决方案 …

文件上传下载概述

So Easy系列之文件上传下载教程 文件上传下载概述 什么是文件上传下载 所谓文件上传下载就是将本地文件上传到服务器端&#xff0c;从服务器端下载文件到本地的过程。例如目前网站需要上传头像、上传下载图片或网盘等功能都是利用文件上传下载功能实现的。 文件上传下载实际上…

Shell运行原理以及Linux中的权限问题

目录 一、shell的运行原理 二、Linux权限的概念 2.1 用户账号切换 2.2 仅提升当前指令的权限 2.3 将普通用户添加到信任列表 三、Linux权限管理 3.1 文件访问者的分类 3.2 文件类型和访问权限 3.3 字符权限值的表示方法 3.3.1 字符表示方法 3.3.2 八进制表示法 3.4…

CSS学习04

文章目录 1.精灵图1.1 为什么需要精灵图1.2 精灵图&#xff08;sprites&#xff09;的使用 2.字体图标2.1 字体图标的产生2.2 字体图标的优点**2.3** **字体图标的下载****2.4** **字体图标的引入**2.5 字体图标的追加 3.CSS 三角3.1 介绍 4.CSS 用户界面样式4.1 鼠标样式 curs…

openGauss学习笔记-11 openGauss 简单数据管理-INSERT INTO语句

文章目录 openGauss学习笔记-11 openGauss 简单数据管理-INSERT INTO语句11.1 语法格式11.2 参数说明11.3 示例 openGauss学习笔记-11 openGauss 简单数据管理-INSERT INTO语句 在创建一个表后&#xff0c;表中并没有数据&#xff0c;使用这个表之前&#xff0c;需要向表中插入…

【Go|第8期】Lorca读取HTML的三种方式

日期&#xff1a;2023年7月16日 作者&#xff1a;Commas 签名&#xff1a;(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释&#xff1a;如果您觉得有所帮助&#xff0c;帮忙点个赞&#xff0c;也可以关注我&#xff0c;我们一起成长&#xff1b;如果有不对的地方&#xf…

【云原生】K8S单节点搭建

Kubernetes Kubernetes基础概念架构1、基础环境2、安装kubelet、kubeadm、kubectl 2、使用kubeadm引导集群1、下载各个机器需要的镜像2、初始化主节点 Kubernetes核心实战Pod Kubernetes基础概念 kubernetes具有以下特性&#xff1a; ● 服务发现和负载均衡 Kubernetes 可以使…

leetcode 669. 修剪二叉搜索树

2023.7.15 知道了如何删除二叉树节点的逻辑之后&#xff0c;这题就不难了。 可以参考删除二叉搜索树中的节点这篇文章。 下面直接上代码&#xff1a; class Solution { public:TreeNode* trimBST(TreeNode* root, int low, int high) {if(root nullptr) return root;root->…

MacOS使用USB接口与IPhone进行Socket通信

演示效果如下: 开源地址: GitHub - rsms/peertalk: iOS and Mac Cocoa library for communicating over USB 克隆源码: git clone https://github.com/rsms/peertalk.git 克隆后打开peertalk然后启动xcode工程 先启动MacOS服务端工程,再启动iOS客户端工程 客户端 服务端

[java安全]URLDNS

文章目录 [java安全]URLDNS前言HashMapURLURLStreamHandler调用过程调用链流程图POC [java安全]URLDNS 前言 URLDNS利用链是一条很简单的链子&#xff0c;可以用来查看java反序列化是否存在反序列化漏洞&#xff0c;如果存在&#xff0c;就会触发dns查询请求 它有如下优点&a…

spring复习:(35)在getBean时,在哪里根据普通bean和工厂bean进行区分处理来返回的?

在AbstractBeanFactory的doGetBean方法&#xff1a; 调用的getObjectForBeanInstance方法部分代码如下&#xff1a; 如果不是工厂bean,则直接将实例返回&#xff0c;否则调用getObjectFromFactoryBean方法获取工厂bean的getObject方法返回的对象 protected Object getObjectF…

Gradle和Aritifactory

Gradle和Aritifactory 本文链接&#xff1a;https://blog.csdn.net/feather_wch/article/details/131746580 文章目录 Gradle和AritifactoryGradle基本介绍Gradle插件开发流程本地仓库artifactory搭建添加仓库使用本地仓库gradle插件仓库引入 Gradle基本介绍 1、Gradle是一种…

node使用fluent-ffmpeg把webm格式的音频转成mp3

下载并安装ffmpeg http://ffmpeg.org/download.html?aemtntg-on https://www.gyan.dev/ffmpeg/builds/ 配置环境变量&#xff1a; 查询版本 装包&#xff1a; yarn add fluent-ffmpeg const ffmpeg require(fluent-ffmpeg)ffmpeg(/temp/ai/hello.webm).output(/temp/ai/h…