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

Redis(无中心化集群搭建)

文章目录

    • 1.无中心化集群
        • 1.基本介绍
        • 2.集群说明
    • 2.基本环境搭建
        • 1.部署规划(6台服务器)
        • 2.首先删除上次的rdb和aof文件(对之前的三台服务器都操作)
          • 1.首先分别登录命令行,关闭redis
          • 2.清除/root/下的rdb和aof文件
          • 3.把上次的哨兵也关闭
        • 3.对新增的三台机器Redis进行初始化
          • 1.安装Redis
            • 1.yum安装gcc
            • 2.查看gcc版本
            • 3.将redis6.2.6上传到/opt目录下
            • 4.进入/opt目录下然后解压
            • 5.进入 redis-6.2.6目录
            • 6.编译并安装
            • 7.进入 /usr/local/bin 查看是否有redis的命令
          • 2.启动并使用Redis
            • 1.进入 /opt/redis-6.2.6/
            • 2.将里面的redis.conf复制一份到/etc下
            • 3.编辑 /etc/redis.conf,将daemonize no修改成daemonize yes即以守护进程的方式启动(后台启动)
            • 4.启动redis,指定刚才的配置文件
            • 5.查看redis进程
          • 3.Redis基本配置
          • 编辑配置文件
            • 1.修改端口为7489 port 6379
            • 2.设置redis密码 requirepass foobared
            • 3.设置redis节点连接其他redis的密码 masterauth(与requirepass 一致即可)
            • 4.使redis支持远程访问 bind 127.0.0.1 -::1 和 protected-mode
            • 5.登录redis的命令行,关闭redis(此时配置文件未生效,所以端口还是6379)
            • 6.重新启动redis,使配置生效
          • 4.开启7489端口
            • 1.宝塔开启端口
            • 2.腾讯云开启端口(只允许本机ip访问,为了方便允许所有ipv4也行,因为配置了密码)
          • 5.Redis持久化配置
            • 1.进入redis配置文件
            • 2.dbfilename为redis持久化的文件名(一般不用改)
            • 3.dir ./ 修改为/root/则每次持久化的dump.rdb都会在/root/下,恢复时无论在哪里启动,都会读取这个文件进行恢复
            • 4.开启AOF持久化配置,编辑配置文件找到appendonly,设置成yes
            • 5.进入命令行关闭redis,需要指定端口,密码,命令
            • 6.重新启动redis,使配置生效
            • 7.发现/root/下面有个配置文件,如果没有dump.rdb是因为redis库中还没东西
          • 6.测试Java连接redis
            • 1.引入jedis的jar包
            • 2.编写测试程序
    • 3.Redis无中心化集群搭建
        • 1.前提条件
          • 1.确保六台服务器都按照前面的要求初始化了
        • 2.Redis集群单个节点配置(六个服务器都进行这个操作)
          • 1.都进入redis配置文件
          • 2.配置下面的三个东西,搜索 REDIS CLUSTER
          • 3.配置解释
          • 4.进行配置
          • 5.重启redis(在解决了下面的问题再重启)
          • 6.报错了(只有之前配置过了主从模式才会报错)
            • 1.原因是之前的主从模式导致了这行在配置文件中持久化了,而集群模式会与这个冲突,删除即可
            • 2.编辑配置文件,找到这行,删除即可
            • 3.再次启动redis,发现以集群模式启动了
          • 7.查看dir下是否生成对应节点文件
        • 3.将六个节点合成一个集群
          • 1.基本介绍
          • 2.合成指令
          • 3.执行报错 [ERR] Node NOAUTH Authentication required.
          • 4.添加一个--askpass参数,要求输入密码即可
          • 5.输入密码之后再输入yes
          • 6.一直在连接,原因是还需要开放总线端口就是redis的端口 + 10000
          • 7.六个服务器都要开放redis总线端口
            • 1.在宝塔开启redis总线端口7489 + 10000 = 17489
            • 2.在腾讯云开放17489端口
          • 8.重新执行命令创建集群,连接成功!如果想要查找是谁的从,就看replicates后面的字符跟Master对应
            • 1.示意图
            • 2.找出对应关系
          • 9.所以小结一下,创建集群的方式
            • 1.开放Redis的总线端口为 redis端口 + 10000
            • 2.创建集群指令
        • 4.集群方式登录
          • 1.登录并验证
          • 2.查看节点关系
          • 3.注意事项
        • 5.Redis插槽机制
          • 1.一个Redis集群中包含16384个插槽,编号为0-16383,
          • 2.集群使用公式CRC16(key)% 16384来计算键key属于哪个插槽,从而将其存放到不同的主机上,其中CRC16(key)计算的是key的校验和
          • 3.示意图
        • 6.在集群录入值
          • 1.首先确保登录时带的 -c参数实现自动重定向
            • 1.关于密码,第一种方式是直接在连接时指定
            • 2.第二种方式是连接后让他询问(推荐)
            • 3.如果不对密码进行设置,则每次切换到其他服务时都要重新输入密码
          • 2.录入数据则会触发插槽机制
          • 3.不在同一个slot下,是不能使用mget,mset等操作的
            • 1.演示
            • 2.解决方式:通过 {} 来定义组,从而使key中{}内相同内容的放到同一个slot中
        • 7.查询集群中的值
          • 1.返回key对应的插槽值
          • 2.返回插槽中有多少个key,注意,只能在该节点管理的slot范围内查找,否则为0
          • 3.返回count个slot槽中的键
        • 8.集群的故障恢复(注意15s超时,再观察)
          • 1.如果主节点down掉了,从节点自动升级为主节点
            • 1.关闭主节点
            • 2.查看节点状态,父节点down了,子节点自动升级
          • 2.如果主节点恢复了,就会降级为子节点
            • 1.启动 主节点
            • 2.再次查看节点状态,已经被降级
          • 3.如果主从节点都挂掉了(概率很低),可以配置服务是否继续
        • 9.集群的Jedis开发
          • 1.基本说明
          • 2.引入依赖
          • 3.代码演示
          • 4.结果展示(没有做日志配置,所以会爆红)
        • 10.Redis集群的优缺点
          • 1.优点
          • 2.缺点

1.无中心化集群

1.基本介绍

image-20240503101226535

2.集群说明

image-20240503101458363

2.基本环境搭建

1.部署规划(6台服务器)
2.首先删除上次的rdb和aof文件(对之前的三台服务器都操作)
1.首先分别登录命令行,关闭redis
/usr/local/bin/redis-cli -p 7489 -a **** shutdown
2.清除/root/下的rdb和aof文件
cd && rm -rf appendonly.aof && rm -rf dump.rdb

image-20240503112700757

3.把上次的哨兵也关闭

image-20240503112840000

3.对新增的三台机器Redis进行初始化
1.安装Redis
1.yum安装gcc
yum install gcc
2.查看gcc版本
gcc --version

image-20240502134411561

3.将redis6.2.6上传到/opt目录下

image-20240502134559769

4.进入/opt目录下然后解压
cd /opt && tar -zxvf redis-6.2.6.tar.gz

image-20240502134704827

5.进入 redis-6.2.6目录
cd redis-6.2.6

image-20240502134745310

6.编译并安装
make && make install

image-20240502134932117

7.进入 /usr/local/bin 查看是否有redis的命令
cd /usr/local/bin && ll

image-20240502135006749

2.启动并使用Redis
1.进入 /opt/redis-6.2.6/
cd /opt/redis-6.2.6/

image-20240502135103511

2.将里面的redis.conf复制一份到/etc下
cp redis.conf /etc/redis.conf

image-20240502135237138

3.编辑 /etc/redis.conf,将daemonize no修改成daemonize yes即以守护进程的方式启动(后台启动)
vim /etc/redis.conf

image-20240502135330240

4.启动redis,指定刚才的配置文件
/usr/local/bin/redis-server /etc/redis.conf
5.查看redis进程
ps -aux | grep redis

image-20240502135537103

3.Redis基本配置
编辑配置文件
vim /etc/redis.conf
1.修改端口为7489 port 6379

image-20240502135741587

2.设置redis密码 requirepass foobared

image-20240503115631730

image-20240503115724349

3.设置redis节点连接其他redis的密码 masterauth(与requirepass 一致即可)

image-20240503115843829

4.使redis支持远程访问 bind 127.0.0.1 -::1 和 protected-mode

image-20240502140044483

image-20240503120110957

5.登录redis的命令行,关闭redis(此时配置文件未生效,所以端口还是6379)
/usr/local/bin/redis-cli shutdown

image-20240503120329286

6.重新启动redis,使配置生效
/usr/local/bin/redis-server /etc/redis.conf && ps -aux | grep redis

image-20240502140612286

4.开启7489端口
1.宝塔开启端口
systemctl start firewalld && firewall-cmd --permanent --add-port=7489/tcp && firewall-cmd --reload && firewall-cmd --query-port=7489/tcp

image-20240502140719020

2.腾讯云开启端口(只允许本机ip访问,为了方便允许所有ipv4也行,因为配置了密码)

image-20240502143052618

5.Redis持久化配置
1.进入redis配置文件
vim /etc/redis.conf
2.dbfilename为redis持久化的文件名(一般不用改)

image-20240502141741998

3.dir ./ 修改为/root/则每次持久化的dump.rdb都会在/root/下,恢复时无论在哪里启动,都会读取这个文件进行恢复

image-20240502141833925

4.开启AOF持久化配置,编辑配置文件找到appendonly,设置成yes

image-20240502142032064

5.进入命令行关闭redis,需要指定端口,密码,命令
/usr/local/bin/redis-cli -p 7489 -a **** shutdown

image-20240502142252827

6.重新启动redis,使配置生效
/usr/local/bin/redis-server /etc/redis.conf && ps -aux | grep redis

image-20240502142304676

7.发现/root/下面有个配置文件,如果没有dump.rdb是因为redis库中还没东西

image-20240503120709268

6.测试Java连接redis
1.引入jedis的jar包

image-20240502143134966

2.编写测试程序
    public static void main(String[] args) {// 连接服务器的redis命令行Jedis jedis = new Jedis("你的redisip", 7489);// 如果redis设置了密码要先进行验证jedis.auth("******");String ping = jedis.ping();System.out.println(ping);}

image-20240503121018034

3.Redis无中心化集群搭建

1.前提条件
1.确保六台服务器都按照前面的要求初始化了
2.Redis集群单个节点配置(六个服务器都进行这个操作)
1.都进入redis配置文件
vim /etc/redis.conf
2.配置下面的三个东西,搜索 REDIS CLUSTER

image-20240503141140709

3.配置解释

image-20240503141256409

4.进行配置

image-20240503141353150

5.重启redis(在解决了下面的问题再重启)
/usr/local/bin/redis-cli -p 7489 -a **** shutdown && /usr/local/bin/redis-server /etc/redis.conf && ps -aux | grep redis
6.报错了(只有之前配置过了主从模式才会报错)
1.原因是之前的主从模式导致了这行在配置文件中持久化了,而集群模式会与这个冲突,删除即可

2.编辑配置文件,找到这行,删除即可

3.再次启动redis,发现以集群模式启动了
/usr/local/bin/redis-server /etc/redis.conf && ps -aux | grep redis

image-20240503142933446

7.查看dir下是否生成对应节点文件
cd && ll

image-20240503143123893

3.将六个节点合成一个集群
1.基本介绍

image-20240503144146298

2.合成指令
/usr/local/bin/redis-cli --cluster create --cluster-replicas 1 *******
3.执行报错 [ERR] Node NOAUTH Authentication required.
4.添加一个–askpass参数,要求输入密码即可
/usr/local/bin/redis-cli --cluster create --cluster-replicas 1 --askpass **********
5.输入密码之后再输入yes

6.一直在连接,原因是还需要开放总线端口就是redis的端口 + 10000

image-20240503151641489

7.六个服务器都要开放redis总线端口
1.在宝塔开启redis总线端口7489 + 10000 = 17489
firewall-cmd --permanent --add-port=17489/tcp && firewall-cmd --reload && firewall-cmd --query-port=17489/tcp

image-20240503151939153

2.在腾讯云开放17489端口

image-20240503152147774

8.重新执行命令创建集群,连接成功!如果想要查找是谁的从,就看replicates后面的字符跟Master对应
1.示意图

2.找出对应关系
9.所以小结一下,创建集群的方式
1.开放Redis的总线端口为 redis端口 + 10000
2.创建集群指令
/usr/local/bin/redis-cli --cluster create --cluster-replicas 1 --askpass *****************
4.集群方式登录
1.登录并验证
redis-cli -c -p 7489

2.查看节点关系
cluster nodes
3.注意事项

image-20240503154050018

5.Redis插槽机制
1.一个Redis集群中包含16384个插槽,编号为0-16383,
2.集群使用公式CRC16(key)% 16384来计算键key属于哪个插槽,从而将其存放到不同的主机上,其中CRC16(key)计算的是key的校验和
3.示意图

image-20240503155044787

6.在集群录入值
1.首先确保登录时带的 -c参数实现自动重定向
1.关于密码,第一种方式是直接在连接时指定
redis-cli -c -p 7489 -a ****
2.第二种方式是连接后让他询问(推荐)
redis-cli -c -p 7489 --askpass
3.如果不对密码进行设置,则每次切换到其他服务时都要重新输入密码

2.录入数据则会触发插槽机制

3.不在同一个slot下,是不能使用mget,mset等操作的
1.演示

2.解决方式:通过 {} 来定义组,从而使key中{}内相同内容的放到同一个slot中

7.查询集群中的值
1.返回key对应的插槽值
cluster keyslot <key>
2.返回插槽中有多少个key,注意,只能在该节点管理的slot范围内查找,否则为0
cluster countkeysinslot <slotnum>
3.返回count个slot槽中的键
cluster getkeysinslot <slot> <count>
8.集群的故障恢复(注意15s超时,再观察)
1.如果主节点down掉了,从节点自动升级为主节点
1.关闭主节点
/usr/local/bin/redis-cli -p 7489 -a ***  shutdown
2.查看节点状态,父节点down了,子节点自动升级
cluster nodes
2.如果主节点恢复了,就会降级为子节点
1.启动 主节点
/usr/local/bin/redis-server /etc/redis.conf && ps -aux | grep redis

image-20240503162918117

2.再次查看节点状态,已经被降级
cluster nodes
3.如果主从节点都挂掉了(概率很低),可以配置服务是否继续

image-20240503163236187

9.集群的Jedis开发
1.基本说明

image-20240503163522983

2.引入依赖
    <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>3.2.0</version></dependency>
3.代码演示
    public static void main(String[] args) {Set<HostAndPort> hostAndPorts = new HashSet<HostAndPort>();// 添加集群节点,可以是多个,保证容错性hostAndPorts.add(new HostAndPort("", 7489));// 创建 JedisPoolConfig 并设置密码JedisPoolConfig poolConfig = new JedisPoolConfig();String password = ""; // 将 "你的密码" 替换为你的 Redis 密码// 创建 JedisCluster 对象时传入密码redis.clients.jedis.JedisCluster jedisCluster = new redis.clients.jedis.JedisCluster(hostAndPorts, 2000, 2000, 5, password, poolConfig);try {// 设置和获取值jedisCluster.set("k1", "v1");String k1 = jedisCluster.get("k1");System.out.println("k1=" + k1);} finally {// 确保在最后关闭 JedisCluster 来释放资源jedisCluster.close();}}
4.结果展示(没有做日志配置,所以会爆红)

image-20240503165131818

10.Redis集群的优缺点
1.优点

image-20240503165354885

2.缺点

image-20240503165448419

相关文章:

Redis(无中心化集群搭建)

文章目录 1.无中心化集群1.基本介绍2.集群说明 2.基本环境搭建1.部署规划&#xff08;6台服务器&#xff09;2.首先删除上次的rdb和aof文件&#xff08;对之前的三台服务器都操作&#xff09;1.首先分别登录命令行&#xff0c;关闭redis2.清除/root/下的rdb和aof文件3.把上次的…...

基于springboot+jsp+Mysql的商务安全邮箱邮件收发

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…...

三.Django--ORM(操作数据库)

目录 1 什么是ORM 1.1 ORM优势 1.2ORM 劣势 1.3 ORM与数据库的关系 2 ORM 2.1 作用 2.2 连接数据库 2.3 表操作--设置字段 2.4 数据库的迁移 写路由增删改查操作 项目里的urls.py: app里的views.py: 注意点: 1 什么是ORM ORM中文---对象-关系映射 在MTV,MVC设计…...

【华为】AC直连二层组网隧道转发实验配置

【华为】AC直连二层组网隧道转发实验配置 实验需求拓扑配置AC数据规划表 AC的配置顺序AC1基本配置(二层通信)AP上线VAP组关联--WLAN业务流量 LSW1AR1STA获取AP的业务流量 配置文档 实验需求 AC组网方式&#xff1a;直连二层组网。 业务数据转发方式&#xff1a;隧道转发。 DHC…...

第 129 场 LeetCode 双周赛题解

A 构造相同颜色的正方形 枚举&#xff1a;枚举每个 3 3 3\times 3 33的矩阵&#xff0c;判断是否满足条件 class Solution {public:bool canMakeSquare(vector<vector<char>>& grid) {for (int i 0; i < 2; i)for (int j 0; j < 2; j) {int c1 0, c…...

GStreamer日志调试笔记

1、查询所有分类 #gst-launch-1.0 --gst-debug-help 2、查询videotestsrc的日志 #gst-launch-1.0 --gst-debug-help | findstr videotestsrc 结果&#xff1a; 3、使用--gst-debug设置相应日志类型的相应等级&#xff0c;越大显示日志越多&#xff0c;排查内存泄露可以设置为9 …...

【api接口开通教程】YouTube Data API v3申请流程

一、背景调查 1.1 API接口介绍 采集youtube数据&#xff0c;大体分为两种方案&#xff1a;一种是基于爬虫&#xff0c;一种是基于API接口。 说人话就是&#xff1a;爬虫相当于走后门、爬窗户&#xff08;利用技术手段窃取&#xff0c;人家没说给&#xff0c;但我硬拿&#x…...

.net 6.0 框架集成ef实战,步骤详解

一、代码框架搭建 搭建如下代码架构&#xff1a; 重点含EntityFrameworkCore工程&#xff0c;该工程中包含AppDbContext.cs和数据表实体AggregateObject 1、AppDbContext 代码案例 //AppDbContext 代码案例using Microsoft.EntityFrameworkCore;namespace EntityFrameworkCo…...

[C/C++] -- 观察者模式

观察者模式是一种行为型设计模式&#xff0c;用于定义对象间的一种一对多的依赖关系&#xff0c;使得当一个对象的状态发生改变时&#xff0c;所有依赖于它的对象都会得到通知并自动更新。 观察者模式涉及以下几个角色&#xff1a; 主题&#xff08;Subject&#xff09;&…...

秋招算法刷题8

20240422 2.两数相加 时间复杂度O&#xff08;max(m,n))&#xff0c;空间复杂度O&#xff08;1&#xff09; public ListNode addTwoNumbers(ListNode l1, ListNode l2) {ListNode headnull,tailnull;int carry0;while(l1!null||l2!null){int n1l1!null?l1.val:0;int n2l2!…...

Docker使用方法

Docker是一种容器化平台&#xff0c;它可以帮助开发人员将应用程序和其依赖项打包成一个独立的、可移植的容器&#xff0c;以便在不同的环境中运行。 以下是使用Docker的基本步骤&#xff1a; 安装Docker&#xff1a;首先&#xff0c;您需要在您的机器上安装Docker。您可以从D…...

HTML学习|网页基本信息、网页基本标签、图像标签、超链接标签、列表标签、表格标签、媒体元素、页面结构分析、iframe内联框架

网页基本信息 DOCTYPE是设置使用什么规范&#xff0c;网页整个信息都在html标签中&#xff0c;head标签里包含字符集设置&#xff0c;网页介绍等信息&#xff0c;title标签是网页的名称&#xff0c;网页的主干都在body标签中 网页基本标签 标题标签 h1~h6都是标题标签&#x…...

001 websocket(评论功能demo)(消息推送)

文章目录 ReviewController.javaWebSocketConfig.javaWebSocketProcess.javaServletInitializer.javaWebsocketApplication.javareadmeindex.htmlapplication.yamlpom.xml ReviewController.java package com.example.controller;import com.example.websocket.WebSocketProces…...

二分查找向下取整导致的死循环69. x 的平方根

二分查找向下取整导致的死循环 考虑伪题目&#xff1a;从数组arr中查找出目标元素target对应的下标&#xff0c;如果数组中不存在目标元素&#xff0c;找 到第一个元素值小于target的元素的下标。 编写二分查找算法如下&#xff1a; Testvoid testBinarySearch(){int[] arr n…...

Kivy 异步任务

如果要进行一些非常耗时的操作(例如&#xff1a;爬虫等)&#xff0c;那么页面就会在这里卡住&#xff0c;而系统就会以为这个软件无响应&#xff0c;并提示关闭&#xff0c;可以说明用户体验极差&#xff0c;因此我们在此处引入异步操作。 在py中引入事件调节器&#xff0c;并在…...

DEV--C++小游戏(吃星星(0.1))

目录 吃星星&#xff08;0.1&#xff09; 简介 头文件 命名空间变量 副函数 清屏函数 打印地图函数 移动函数 主函数 0.1版完整代码 吃星星&#xff08;0.1&#xff09; 注&#xff1a;版本<1为未实现或只实现部分 简介 用wasd去吃‘*’ 头文件 #include<bi…...

LINUX 入门 4

LINUX 入门 4 day6 7 20240429 20240504 耗时&#xff1a;240min 课程链接地址 第4章 LINUX环境编程——实现线程池 C基础 第3节 #define里面的行不能乱空行&#xff0c;要换行就打\ typedef 是 C 和 C 中的一个关键字&#xff0c;用于为已有的数据类型定义一个新的名字。…...

Imagine Flash、StyleMamba 、FlexControl、Multi-Scene T2V、TexControl

本文首发于公众号&#xff1a;机器感知 Imagine Flash、StyleMamba 、FlexControl、Multi-Scene T2V、TexControl You Only Cache Once: Decoder-Decoder Architectures for Language Models We introduce a decoder-decoder architecture, YOCO, for large language models, …...

Java Collections.emptyList() 方法详解

前言 在Java开发的日常中&#xff0c;我们常常需要处理集合数据结构&#xff0c;而这其中就免不了要面对“空集合”的场景。传统的做法可能是直接返回 null&#xff0c;但这往往会引入空指针异常的风险&#xff0c;降低了代码的健壮性。幸运的是&#xff0c;Java为我们提供了一…...

Vue前端环境准备

vue-cli Vue-cli是Vue官方提供的脚手架&#xff0c;用于快速生成一个Vue项目模板 提供功能&#xff1a; 统一的目录结构 本地调试 热部署 单元测试 集成打包上线 依赖环境&#xff1a;NodeJs 安装NodeJs与Vue-Cli 1、安装nodejs&#xff08;已经安装就不用了&#xff09; node-…...

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站&#xff0c;会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后&#xff0c;网站没有变化的情况。 不熟悉siteground主机的新手&#xff0c;遇到这个问题&#xff0c;就很抓狂&#xff0c;明明是哪都没操作错误&#x…...

shell脚本--常见案例

1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件&#xff1a; 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

ESP32读取DHT11温湿度数据

芯片&#xff1a;ESP32 环境&#xff1a;Arduino 一、安装DHT11传感器库 红框的库&#xff0c;别安装错了 二、代码 注意&#xff0c;DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

【AI学习】三、AI算法中的向量

在人工智能&#xff08;AI&#xff09;算法中&#xff0c;向量&#xff08;Vector&#xff09;是一种将现实世界中的数据&#xff08;如图像、文本、音频等&#xff09;转化为计算机可处理的数值型特征表示的工具。它是连接人类认知&#xff08;如语义、视觉特征&#xff09;与…...

如何在网页里填写 PDF 表格?

有时候&#xff0c;你可能希望用户能在你的网站上填写 PDF 表单。然而&#xff0c;这件事并不简单&#xff0c;因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件&#xff0c;但原生并不支持编辑或填写它们。更糟的是&#xff0c;如果你想收集表单数据&#xff…...

快刀集(1): 一刀斩断视频片头广告

一刀流&#xff1a;用一个简单脚本&#xff0c;秒杀视频片头广告&#xff0c;还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农&#xff0c;平时写代码之余看看电影、补补片&#xff0c;是再正常不过的事。 电影嘛&#xff0c;要沉浸&#xff0c;…...

uniapp 字符包含的相关方法

在uniapp中&#xff0c;如果你想检查一个字符串是否包含另一个子字符串&#xff0c;你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的&#xff0c;但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...

在树莓派上添加音频输入设备的几种方法

在树莓派上添加音频输入设备可以通过以下步骤完成&#xff0c;具体方法取决于设备类型&#xff08;如USB麦克风、3.5mm接口麦克风或HDMI音频输入&#xff09;。以下是详细指南&#xff1a; 1. 连接音频输入设备 USB麦克风/声卡&#xff1a;直接插入树莓派的USB接口。3.5mm麦克…...

go 里面的指针

指针 在 Go 中&#xff0c;指针&#xff08;pointer&#xff09;是一个变量的内存地址&#xff0c;就像 C 语言那样&#xff1a; a : 10 p : &a // p 是一个指向 a 的指针 fmt.Println(*p) // 输出 10&#xff0c;通过指针解引用• &a 表示获取变量 a 的地址 p 表示…...

性能优化中,多面体模型基本原理

1&#xff09;多面体编译技术是一种基于多面体模型的程序分析和优化技术&#xff0c;它将程序 中的语句实例、访问关系、依赖关系和调度等信息映射到多维空间中的几何对 象&#xff0c;通过对这些几何对象进行几何操作和线性代数计算来进行程序的分析和优 化。 其中&#xff0…...