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

12月第十九讲:Redis应用Redis相关解决方案

1.数据库与缓存一致性方案

2.热key探测系统处理热key问题

3.缓存大value监控和切分处理方案

4.Redis内存不足强制回收监控告警方案

5.Redis集群缓存雪崩自动探测 + 限流降级方案

6.缓存击穿的解决方法

线上Redis比较严重的问题排序是:数据库和缓存一致性、热key、大value、缓存雪崩限流降级、内存不足强制回收

1.数据库与缓存一致性方案

(1)数据库与缓存同步双写强一致性方案

(2)数据库与缓存异步同步最终一致性方案

现有的业务场景下,都会涉及到数据库以及缓存双写的问题。⽆论是先删缓存再更新数据,或先更新数据再删缓存,都⽆法保证⼀致性。本身它们就不是⼀个数据源,⽆法通过代码上的谁先谁后去保证顺序。

(1)数据库与缓存同步双写强一致性方案

这是适合中小企业的方案:读数据时自动进行读延期,实现数据冷热分离。在保证数据库和缓存一致性时使用分布式锁,第一个获得分布式锁的线程双写数据库和缓存成功后才释放分布式锁。然后在高并发下,通过锁超时时间,实现"串行等待分布式锁 + 串行读缓存"转"串行读缓存"。

(2)数据库与缓存异步同步最终一致性方案

如果不想对数据库和缓存进行双写,可以监听数据库binlog日志,通过异步来进行数据复制同步,从而保证数据的最终一致性。

这个方案需要先写成功DB,之后才能读到缓存value。这个方案需要确保binlog不能丢失,并且需要使用Canal监听binlog。

一.具体的数据一致性方案设计

⾸先对于所有的DB操作都不去添加具体的删除缓存操作,⽽是待数据确认已提交到数据库后,通过Canal去监听binlog的变化。

Canal会将binlog封装成消息发送到MQ,然后系统消费MQ的消息时,需要过滤出增删改类型的binlog消息。接着根据binlog消息 + 一致性相关的表和字段组装需要进行缓存删除的key,最后组装出key就可以对缓存进行删除了。

相关文章:

https://book.qq.com/book-search/%E5%90%8D%E4%BC%98%E9%A6%86%E7%BD%91%E3%80%9023Y4.com%E3%80%91?a21a
https://book.qq.com/book-search/%E6%B5%B7%E8%A7%92%E7%A4%BE%E5%8C%BA%E3%80%9023Y4.com%E3%80%91?b21b
https://book.qq.com/book-search/%E8%89%B3%E6%AF%8D%E7%BD%91%E8%BF%9B%E3%80%9023Y4.com%E3%80%91?c21c
https://book.qq.com/book-search/%E6%9E%9C%E5%86%BB%E4%BC%A0%E5%AA%92%E3%80%9023Y4.com%E3%80%91?d21d
https://book.qq.com/book-search/%E6%9E%9C%E5%86%BB%E4%BC%A0%E5%AA%92%E8%BF%9B23Y4.com%E7%9C%8B?e21e
https://book.qq.com/book-search/%E6%80%A7%E5%B7%B4%E5%85%8B%E8%BF%9B%E3%80%9023Y4.com%E3%80%91?f21f
https://book.qq.com/book-search/%E7%88%B1%E5%A8%81%E5%A5%B6%E7%BD%91%E3%80%9023Y4.com%E3%80%91?g21g
https://book.qq.com/book-search/%E7%A6%81%E6%BC%AB%E5%A4%A9%E5%A0%82%E3%80%9023Y4.com%E3%80%91?c21a
https://book.qq.com/book-search/%E6%92%B8%E6%92%B8%E7%A4%BE%E7%BD%91%E3%80%9023Y4.com%E3%80%91?a21b
https://book.qq.com/book-search/%E6%8A%96%E9%98%B4%E4%B8%8B%E8%BD%BD%E3%80%8A23Y4.com%E3%80%8B?b21c
https://book.qq.com/book-search/%E6%8A%96%E9%98%B4%E7%BD%91%E7%AB%99%E3%80%9023Y4.com%E3%80%91?c21d

二.具体的数据一致性方案流程图

三.处理MQ消息保证最终数据一致性

//处理MQ消息保证最终数据一致性
@Slf4j
@Component
public class CookbookConsistencyListener implements MessageListenerConcurrently {@Autowiredprivate RedisCache redisCache;//处理MySQL的binlog变化,处理需要清理的缓存key@Overridepublic ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> list, ConsumeConcurrentlyContext consumeConcurrentlyContext) {try {for (MessageExt messageExt : list) {String msg = new String(messageExt.getBody());//解析binlog数据模型,并过滤掉查询BinlogDataDTO binlogData = buildBinlogData(msg);//获取binlog的模型,获取本次变化的表名称,在本地配置常量类里面匹配对应的缓存key前缀以及缓存标识字段,非配置的表不进行处理String cacheKey = filterConsistencyTable(binlogData);//删除该key的缓存deleteCacheKey(cacheKey);}} catch (Exception e) {log.error("consume error, 缓存清理失败", e);//本次消费失败,下次重新消费return ConsumeConcurrentlyStatus.RECONSUME_LATER;}return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;}//解析binlog的数据模型,并过滤掉查询的binlogprivate BinlogDataDTO buildBinlogData(String msg) {//先解析binlog的对象,转换为模型BinlogDataDTO binlogData = BinlogUtils.getBinlogData(msg);//模型为null,则直接返回if (Objects.isNull(binlogData)) {return null;}Boolean isOperateType = BinlogType.INSERT.getValue().equals(binlogData.getOperateType())|| BinlogType.DELETE.getValue().equals(binlogData.getOperateType())|| BinlogType.UPDATE.getValue().equals(binlogData.getOperateType());//只保留增删改的binlog对象,如果数据对象为空则也不处理if (!isOperateType || CollectionUtils.isEmpty(binlogData.getDataMap())) {return null;}//返回解析好的可用模型return binlogData;}//过滤掉目前不需要处理的表的Binlog,并返回组装所需的缓存keyprivate String filterConsistencyTable(BinlogDataDTO binlogData) {if (Objects.isNull(binlogData)) {return null;}String tableName = binlogData.getTableName();List<Map<String, Object>> dataList = binlogData.getDataMap();//获取配置的常量映射的具体配置ConsistencyTableEnum consistencyTableEnum = ConsistencyTableEnum.findByEnum(tableName);if (Objects.isNull(consistencyTableEnum)) {return null;}String cacheValue = "";if (CollectionUtils.isNotEmpty(dataList)) {Map<String, Object> dataMap = dataList.get(0);cacheValue = dataMap.get(consistencyTableEnum.getCacheField()) + "";}if (StringUtils.isBlank(cacheValue)) {return null;}//获取配置的缓存前缀key + 当前的标识字段,组装缓存keyreturn consistencyTableEnum.getCacheKey() + cacheValue;}//对缓存进行清理private void deleteCacheKey(String cacheKey) {if (StringUtils.isBlank(cacheKey)) {return;}redisCache.delete(cacheKey);}
}public enum ConsistencyTableEnum {//商品表缓存配置SKU_INFO("sku_info", RedisKeyConstants.GOODS_INFO_PREFIX, "id");//配置相关的表名称private final String tableName;//缓存的前缀keyprivate final String cacheKey;//缓存的标识字段private final String cacheField;...
}

2.热key探测系统处理热key问题

(1)什么是热key问题

(2)如何解决热key问题

(3)开源热key探测系统的工作流程图和架构图

当系统大量使用Redis进行开发后,线上必然会遇到热key和大value问题。

(1)什么是热key问题

比如微博大热点,瞬间千万级大流量都会涌入某微博来浏览某个数据。这时如果这个热点数据是存储在一个Redis节点里,那么就会出现每秒百万级的请求都到一个Redis节点去了。如下图示:

(2)如何解决热key问题

为了解决热key问题,我们首先需要一个热key探测系统。热key探测系统会在服务系统(Redis客户端)进行接入统计,一旦热key探测系统在服务系统识别出某个key符合热key的条件,那么就会将这个热key的数据缓存到服务系统的JVM本地缓存里。

所以,热key探测系统具备的两大核心功能:

一.自动探测热key

二.自动缓存热key数据到JVM本地缓存

(3)热key探测系统的工作流程图和架构图

一.热key探测系统的工作流程简图

二.热key探测系统的详细架构图

3.缓存大value监控和切分处理方案

大value,顾名思义,就是value值特别大,几M甚至几十M。如果在一次网络读取里面,频繁读取大value,会导致网络带宽被占用掉。value太大甚至会把带宽打满,导致其他数据读取请求异常。所以对于大value,要进行特殊的切分处理。

一.首先要能够对Redis里的大value进行监控。如果发现超过1MB的大value 的值,就监控和报警。

二.然后进行自动处理,也就是把这个value的值,转换为拆分字符串来缓存。比如将一个大value拆分为10个串,把一个kv拆分为10个kv来存储:test_key => test_key_01、test_key_02...

三.接着进行读取的时候,则依次读取这拆分字符串对应的key,最后将读出来的拆分字符串进行重新拼接还原成原来的大value值。

相关文章:

12月第十九讲:Redis应用Redis相关解决方案

1.数据库与缓存一致性方案 2.热key探测系统处理热key问题 3.缓存大value监控和切分处理方案 4.Redis内存不足强制回收监控告警方案 5.Redis集群缓存雪崩自动探测 限流降级方案 6.缓存击穿的解决方法 线上Redis比较严重的问题排序是&#xff1a;数据库和缓存一致性、热key…...

solon 集成 activemq-client (sdk)

原始状态的 activemq-client sdk 集成非常方便&#xff0c;也更适合定制。就是有些同学&#xff0c;可能对原始接口会比较陌生&#xff0c;会希望有个具体的示例。 <dependency><groupId>org.apache.activemq</groupId><artifactId>activemq-client&l…...

STM32-笔记7-继电器定时开闭

1、复制02项目&#xff0c;重命名08-继电器定时开闭 打开项目工程 在\Drivers\BSP\该路径下&#xff0c;新建alarm文件夹&#xff0c;该文件夹下里面包含alarm.c和alarm.h文件 加载进该项目中 为什么这里使用的是 这个单词&#xff0c;而不是继电器&#xff08;relay&#…...

B4X编程语言:B4X的映射(数据地图Map)详解

B4X的映射(Map)是由多个键值对组成的数据集合&#xff0c;也称为数据地图。它和列表一样也是一个非可视化的数据容器&#xff0c;在B4X中作为变量使用&#xff0c;用于在单个变量下存储多个键值对。 映射中的键是唯一的。 这意味着&#xff0c;如果您添加了一个键/值对…...

windows C++ 判断文件大小,清空文件,写日志

windows C 判断文件大小&#xff0c;清空文件&#xff0c;写日志等几个常见的接口&#xff0c;记录一下备忘 #include <iostream> #include <vector> #include<Windows.h> #include<string> #include <iostream> #include <sys/types.h> …...

用Python设置Excel工作表的页眉和页脚

在处理和分析数据时&#xff0c;Excel作为一款功能强大的工具&#xff0c;被广泛应用于各个领域。当涉及到打印或分享工作表时&#xff0c;为文档添加专业的页眉和页脚不仅能提升文件的视觉效果&#xff0c;还能提供必要的信息&#xff0c;例如公司标识、日期、文件名或是页码等…...

electron-vite【实战】自定义标题栏【组件封装】(含异形标题栏,指定区域拖拽,窗口置顶,窗口最小化,窗口最大化,取消最大化,隐藏窗口到托盘等)

效果预览 技术要点 透明背景 src/main/index.ts 的 new BrowserWindow 中添加 transparent: true, // 设置窗口背景透明frame: false, // 隐藏窗口边框仅图标和标题部分可拖拽 仅图标和标题部分添加样式 drag .drag {-webkit-app-region: drag; }图标与标题栏的融合 标题栏的…...

MySQL复制问题和解决

目录 环境介绍 一&#xff0c;主库执行delete&#xff0c;从库没有该数据 模拟故障 修复故障 二&#xff0c;主库执行insert&#xff0c;从库已存在该数据 模拟故障 故障恢复 三&#xff0c;主库执行update&#xff0c;从库没有该数据 模拟故障 故障恢复 四&#xf…...

Spark和Hive的区别

1 、 Hive Hive 是基于 Hadoop 的数据仓库工具&#xff0c;同时又是查询引擎&#xff0c; Spark SQL 只是取代的 Hive 的查询引擎这一部分&#xff0c;企业可以使用HiveSpark SQL 进行开发。 Hive 的主要工作如下&#xff1a; 把HQL 翻译长 map-reduce 的代码&#xff0c;并…...

Type-C 接口电热毯:开启温暖智能新时代

在当今科技迅猛发展的时代&#xff0c;智能家居产品如同璀璨繁星般点缀着我们的生活&#xff0c;从智能灯光的温馨到温控系统的精准&#xff0c;处处都彰显着科技赋予生活的便捷与舒适。而在这股追求高效与智能化的洪流之中&#xff0c;一款极具创新的电热毯——Type-C 接口电热…...

React 19新特性探索:提升性能与开发者体验

React作为最受欢迎的JavaScript库之一&#xff0c;不断推出新版本以应对日益复杂的应用需求。React 19作为最新的版本&#xff0c;引入了一系列令人兴奋的新特性和改进&#xff0c;旨在进一步提升应用的性能、开发效率和用户体验。 本文将深入探讨React 19的新特性&#xff0c;…...

【数据库】SQL语句基础

【数据库】SQL语句基础 文章目录 【数据库】SQL语句基础一、SQL与数据库二、 SQL语句类型2.1 数据定义语言&#xff08;DDL&#xff09;1. 创建数据库&#xff1a;CREATE DATABASE2. 创建表&#xff1a;CREATE TABLE3. 删除表&#xff1a;DROP TABLE4. 修改表结构&#xff1a;A…...

性能】JDK和Jmeter的安装与配置

一、JDK环境配置 1. 下载JDK 官网下载地址&#xff1a;http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521261.html 选择对应系统的安装包&#xff0c;下载后安装&#xff0c;安装中记录JDK安装的地址&#xff0c;之后一直点击下一…...

Hadoop、Hbase使用Snappy压缩

1. 前期准备 系统环境&#xff1a;centos7.9 配置信息&#xff1a;8C8G100G hadoop和hbase为单节点部署模式 jdk版本jdk1.8.0_361 1.1. 修改系统时间 timedatectl set-timezone <TimeZone> 1.2. 修改主机名以及主机名和IP的映射 vim /etc/hosts #将自己的主机名以及…...

初试Docker

1. 查看版本 docker --version2. 拉取镜像并查看当前存在的镜像 docker pull hello-world查看是否成功拉取到docker docker images在Docker Desktop 可视化查看 3. 删除镜像 docker rmi xxx4. 启动容器 以下命令使用 mysql镜像启动一个容器&#xff0c;参数为以命令行模…...

【Rust自学】4.5. 切片(Slice)

4.5.0. 写在正文之前 这是第四章的最后一篇文章了&#xff0c;在这里也顺便对这章做一个总结&#xff1a; 所有权、借用和切片的概念确保 Rust 程序在编译时的内存安全。 Rust语言让程序员能够以与其他系统编程语言相同的方式控制内存使用情况&#xff0c;但是当数据所有者超…...

番外:ubuntu 下的sqlite3

What Is SQLite? SQLite is a C-language library that implements a small, fast, self-contained, high-reliability, full-featured, SQL database engine. SQLite is the most used database engine in the world ps:SQLite Home Page sqlite3 的安装&#xff1a; user…...

全脐点曲面当且仅当平面或者球面的一部分

S 是全脐点曲面当且仅当 S 是平面或者球面的一部分。 S_\text{ 是全脐点曲面当且仅当 }{S_\text{ 是平面或者球面的一部分。}} S 是全脐点曲面当且仅当 ​S 是平面或者球面的一部分。​ 证&#xff1a; 充分性显然&#xff0c;下证必要性。 若 r ( u , v ) r(u,v) r(u,v)是…...

Vue之版本演进

一、引言 Vue.js&#xff0c;发音为 /vjuː/&#xff0c;是一款轻量级的用于构建用户界面的渐进式JavaScript框架。自2014年由前Google工程师尤雨溪&#xff08;Evan You&#xff09;发布以来&#xff0c;Vue.js凭借其简洁的API、灵活的组件系统以及高效的性能&#xff0c;迅速…...

四川托普信息技术职业学院教案1

四川托普信息技术职业学院教案 【计科系】 周次 第 1周&#xff0c;第1次课 备 注 章节名称 第1章 XML语言简介 引言 1.1 HTML与标记语言 1.2 XML的来源 1.3 XML的制定目标 1.4 XML概述 1.5 有了HTML了&#xff0c;为什么还要发展XML 1.5.1 HTML的缺点 1.5.2 XML的特点 1.6 X…...

《Java核心技术I》Swing中的边框

边框 BorderFactory静态方法创建边框&#xff0c;凹斜面&#xff0c;凸斜面&#xff0c;蚀刻&#xff0c;直线&#xff0c;蒙版&#xff0c;空白。 边框添加标题&#xff0c;BorderFactory.createTitledBorder 组合边框&#xff0c;BorderFactory.createCompoundBorder JCo…...

xlua中自定义lua文件加载的一种方式

此种方法来自LoxodonFramework&#xff0c;这里只做记录 定义一个LoaderBase类&#xff0c;做一个到CustomLoader的隐式类型转换 public abstract class LoaderBase {protected abstract byte[] Load(ref string fileName);/// <summary>/// 隐式类型转换&#xff0c;将…...

Suno Api V4模型无水印开发「高清音频WAV下载」 —— 「Suno Api系列」第6篇

历史文章 Suno AI API接入 - 将AI音乐接入到自己的产品中&#xff0c;支持120并发任务 Suno Api V4模型无水印开发「灵感模式」 —— 「Suno Api系列」第1篇 Suno Api V4模型无水印开发「自定义模式」 —— 「Suno Api系列」第2篇 Suno Api V4模型无水印开发「AI生成歌词」…...

EE308FZ_Sixth Assignment_Beta Sprint_Sprint Essay1

AssignmentBeta SprintCourseEE308FZ[A] — Software EngineeringClass Link2401_MU_SE_FZURequirementsSixth Assignment——Beta SprintTeam NameFZUGOObjectiveSprint Essay 1_Day1-Day2 (12.11-12.12)Other Reference1. WeChat Mini Program Design Guide 2. Javascript St…...

github如何给本机绑定 ssh密钥(MACOS)

生成 SSH 密钥 如果没有现成的密钥&#xff0c;执行以下命令来生成一个新的 SSH 密钥&#xff1a; ssh-keygen -t rsa -b 4096 -C "替换为你的邮箱" 添加 SSH 密钥到 SSH 代理 在终端中运行以下命令&#xff0c;启动 SSH 代理&#xff1a; eval "$(ssh-agen…...

使用Python实现基于AR的教育应用:打破课堂的墙壁

友友们好! 我的新专栏《Python进阶》正式启动啦!这是一个专为那些渴望提升Python技能的朋友们量身打造的专栏,无论你是已经有一定基础的开发者,还是希望深入挖掘Python潜力的爱好者,这里都将是你不可错过的宝藏。 在这个专栏中,你将会找到: ● 深入解析:每一篇文章都将…...

【数据分析】层次贝叶斯

文章目录 一、 贝叶斯推理二、 层次贝叶斯模型三、 层次贝叶斯的特点四、 数学表述五、推断方法六、应用领域 层次贝叶斯&#xff08;Hierarchical Bayesian&#xff09;方法是一种基于贝叶斯推理的统计模型&#xff0c;用于处理具有多个层次结构的数据模型。 它允许我们在同一…...

linux top命令刷新速度的原理

top命令刷新速度的原理 top命令默认会按照一定的时间间隔&#xff08;通常是3秒&#xff09;更新系统资源使用情况的显示内容。它通过读取系统的/proc文件系统中的相关文件&#xff08;如/proc/stat用于CPU信息、/proc/meminfo用于内存信息等&#xff09;来获取最新的进程和资源…...

bestphp‘s revenge

bestphp’s revenge 知识点 php session反序列化 解题 <?php highlight_file(__FILE__); $b implode; call_user_func($_GET[f], $_POST); //参数二的位置固定为 $_POST 数组&#xff0c;我们很容易便想到利用 extract 函数进行变量覆盖&#xff0c;以便配合后续利用…...

中化信息与枫清科技深化合作:共探“AI+”产业新生态

随着数字化转型的浪潮席卷全球&#xff0c;数据已成为推动创新和经济增长的关键力量。为持续深化数据要素价值挖掘与应用实践&#xff0c;推动打造行业交流平台&#xff0c;驱动产业创新共荣&#xff0c;2024 年 12 月 18 日 -19 日&#xff0c;由中国通信标准化协会主办的“20…...

Java性能测试Benchmark使用总结

如何测量Java代码的性能 在 Java 中&#xff0c;可以使用多种方法来测量一段代码的执行性能。使用 System.currentTimeMillis()是最常见的方法 long startTime System.currentTimeMillis();// 需要测量的代码块 for (int i 0; i < 1000000; i) {// 示例代码 }long endTi…...

完整微服务设计 功能实现

我们将以一个简单的电商系统为例&#xff0c;实现微服务架构&#xff0c;逐步用Java代码详细实现每个模块&#xff0c;并配合注释帮助小白理解。在这个实现中&#xff0c;我们使用以下工具和框架&#xff1a; Spring Boot&#xff1a;用于构建微服务。Spring Cloud&#xff1a…...

【Java基础面试题025】什么是Java的Integer缓存池?

回答重点 Java的Integer缓存池&#xff08;Integer Cache&#xff09;是为了提升性能和节省内存。根据实践发现大部分的数据操作都集中在值比较小的范围&#xff0c;因此缓存这些对象可以减少内存分配和垃圾回收的负担&#xff0c;提升性能 在 -128到127范围内的Integer对象会…...

道可云人工智能元宇宙每日资讯|浙江工商大学发布“人工智能时代创新型人才培养行动计划”

道可云元宇宙每日简报&#xff08;2024年12月20日&#xff09;讯&#xff0c;今日元宇宙新鲜事有&#xff1a; 浙江工商大学发布“人工智能时代创新型人才培养行动计划” 12月18日&#xff0c;浙江工商大学发布了《人工智能时代创新型人才培养行动计划》&#xff0c;提出人工…...

树莓派4B 搭建openwrt内置超多插件docker,nas等等使用教程

刷入固件 (想要固件的加我vx wyy7293) bleachwrt-plus-20241112-bcm27xx-bcm2711-rpi-4-squashfs-factory.img上电,并且把网线两头分别插在pi网口上和电脑的网口上(电脑必须断网) 等待网口灯亮,进入192.168.1.1 默认账密 root password 进入系统后更改openwrt的网关地址相关…...

excel 列名是数据表 的字段名 ,单元格的值 是数据表对应字段的值,生成sql插入语句

在 Excel 中&#xff0c;按 Alt F11 打开 VBA 编辑器。在菜单栏选择 插入 -> 模块&#xff0c;在新模块中粘贴以下代码。 VBA 代码 Sub GenerateSQLInsertStatementsToFile()Dim ws As WorksheetDim lastRow As Long, lastCol As Long, i As Long, j As LongDim sql As S…...

【Rust自学】4.3. 所有权与函数

4.3.0 写在正文之前 在学习了Rust的通用编程概念后&#xff0c;就来到了整个Rust的重中之重——所有权&#xff0c;它跟其他语言都不太一样&#xff0c;很多初学者觉得学起来很难。这个章节就旨在让初学者能够完全掌握这个特性。 本章有三小节&#xff1a; 所有权&#xff1…...

OpenShift 4 - 多云管理(2) - 配置多集群观察功能

《OpenShift / RHEL / DevSecOps 汇总目录》 本文在 OpenShift 4.17 RHACM 2.12 环境中进行验证。 文章目录 多集群观察技术架构安装多集群观察功能监控多集群的运行状态监控多集群的应用运行在被管集群监控应用运行在管理集群监控被管集群的应用运行 参考 多集群观察技术架构…...

【机器学习】机器学习的基本分类-强化学习(Reinforcement Learning, RL)

强化学习&#xff08;Reinforcement Learning, RL&#xff09;是一种基于试错的方法&#xff0c;旨在通过智能体与环境的交互&#xff0c;学习能够最大化累积奖励的策略。以下是强化学习的详细介绍。 强化学习的核心概念 智能体&#xff08;Agent&#xff09; 执行动作并与环境…...

Docker 设置代理的三种方法(2024年12月19日亲自测试)

Docker 设置代理的三种方法 在 Docker 中设置代理是非常常见的需求&#xff0c;尤其是在某些需要通过代理访问外部资源的网络环境下。本文将介绍三种配置 Docker 使用代理的常见方法&#xff1a;通过 daemon.json 配置镜像加速器、通过 daemon.json 配置 HTTP/HTTPS 代理、以及…...

Pycharm配置Python开发环境

Pycharm配置Python开发环境 在之前的文章中,安装好了Pyhton和Pycharm。 打开Pycharm,如下图 配置完成之后,如下图所示:...

【信息系统项目管理师】高分论文:论信息系统项目的进度管理(一体化智能公共数据平台)

更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 论文1、规划进度管理2、定义活动3、排列活动顺序5、制定进度计划6、控制进度论文 2022年9月,我作为项目经理参加了XX市的一体化智能公共数据平台项目的建设工作,2022年是XX市政府数字化改革的元年,全市上下…...

Chromium CDP 开发(十):Chromium 中增加自己的Domain

1. 引言 在深入了解了 Chromium CDP&#xff08;Chrome DevTools Protocol&#xff09;的开发过程之后&#xff0c;接下来我们将探讨如何创建一个自定义的 CDP Domain。通过为特定功能创建自己的 CDP Domain&#xff0c;可以避免对已有的 CDP 进行侵入式修改&#xff0c;从而更…...

《基于 Python 的网页爬虫详细教程》

一、引言 在当今信息时代&#xff0c;从互联网上获取大量有价值的数据对于许多领域的研究和分析至关重要。网页爬虫是一种自动化程序&#xff0c;可以从网页上抓取所需的数据。Python 作为一种强大的编程语言&#xff0c;拥有丰富的库和工具&#xff0c;使得网页爬虫的开发变得…...

前端知识图谱 - JavaScript基础(变量和类型)

变量和类型 1. JavaScript 规定了几种语言类型&#xff1f; JavaScript 语言的每一个值都属于某一种数据类型&#xff0c;它规定了 7 种语言类型。语言类型广泛用于变量、函数参数、表达式、函数返回值等场合&#xff0c;根据最新的语言标准&#xff0c;这 7 种语言类型如下&…...

五十个网络安全学习项目——(九)无线网络安全分析

五十个网络安全学习项目——&#xff08;九&#xff09;无线网络安全分析 这个系列灵感来源是&#xff1a;50个网络安全项目创意&#xff1a;覆盖新手至专家级&#xff0c;本人打算把这些项目都做一遍&#xff0c;做好记录&#xff0c;也算是对自己的提升。 本文将对WAPI 协议…...

10. 考勤信息

题目描述 公司用一个字符串来表示员工的出勤信息 absent:缺勤late: 迟到leaveearly: 早退present: 正常上班 现需根据员工出勤信息&#xff0c;判断本次是否能获得出勤奖&#xff0c;能获得出勤奖的条件如下: 缺勤不超过一次&#xff0c;没有连续的迟到/早退:任意连续7次考勤&a…...

预览和下载 (pc和微信小程序)

1.微信小程序 预览pdf 或者 图片等 //utils.js 文件//通过接口返回文件链接 打开文档 export default function previewFile({ downLinkUrl, tempFilePath }) {let url "https://" downLinkUrl.replace("http://", "").replace("https:…...

Redis 7.x如何安装与配置?保姆级教程

大家好&#xff0c;我是袁庭新。最新写了一套最新版的Redis 7.x企业级开发教程&#xff0c;今天先给大家介绍下Redis 7.x如何在Linux系统上安装和配置。 1 Redis下载与安装 使用非关系型数据库Redis必须先进行安装配置并开启Redis服务&#xff0c;然后使用对应客户端连接使用…...

序列化和反序列化(一)

因为通过这段时间的学习&#xff0c;发现&#xff0c;序列化和反序列化的考点和漏洞在平时遇到的还是比较多的&#xff0c;而且自己也没有特别去学习过这个知识点&#xff0c;所以在这里写一篇关于这里序列化和反序列话的博客&#xff0c;废话就停止在这里了。 在介绍具体的序列…...