多级缓存架构深度解析:从设计原理到生产实践
多级缓存架构深度解析:从设计原理到生产实践
一、多级缓存架构核心定位与设计原则
1. 架构分层与角色定位
多级缓存通过分层存储、流量削峰、数据分级实现性能与成本的平衡,典型三层架构如下:
层级 | 代表组件 | 存储介质 | 数据特征 | 命中目标 | 成本级别 |
---|---|---|---|---|---|
一级缓存 | Caffeine/Guava | 本地堆内存 | 热数据(访问量前 10%) | 70%+ | 高 |
二级缓存 | Redis | 远程内存 | 温数据(访问量 20%-30%) | 25%+ | 中 |
三级缓存 | MySQL/ES | 磁盘 / SSD | 冷数据(访问量 < 10%) | <5% | 低 |
设计核心原则
- 数据一致性:写操作遵循 “数据库优先” 原则,通过消息队列异步更新各级缓存
- 流量分级过滤:热数据在一级缓存直接处理,温数据通过二级缓存拦截,冷数据才穿透至数据库
- 成本优先策略:按数据访问频率分配存储资源,高频数据驻留高价内存,低频数据使用廉价存储
2. 典型应用场景与收益
适用场景
- 高并发读场景(如电商商品详情页、社交动态列表)
- 数据读写比大于 10:1 的业务(如报表查询、字典数据)
- 对响应延迟敏感的前端接口(要求 RT<50ms)
性能收益对比
指标 | 单级 Redis 缓存 | 三级缓存架构 | 提升比例 |
---|---|---|---|
数据库 QPS | 5000 | 500 | 90% |
平均响应时间 | 80ms | 20ms | 75% |
内存成本 | 100GB | 30GB(本地)+70GB(Redis) | 持平 |
二、缓存加载与更新全流程深度剖析
1. 读流程:三级缓存穿透策略
核心逻辑伪代码
public Object get(String key) {// 一级缓存(本地)Object value = localCache.getIfPresent(key);if (value != null) {return value; // 命中直接返回}// 二级缓存(Redis)value = redisTemplate.opsForValue().get(key);if (value != null) {localCache.put(key, value); // 回种到一级缓存return value;}// 三级缓存(数据库)value = db.query(key);if (value != null) {redisTemplate.opsForValue().set(key, value, ttl, TimeUnit.SECONDS); // 写入 RedislocalCache.put(key, value); // 写入本地缓存}return value;
}
优化点
- 本地缓存预热:启动时通过
localCache.putAll(redisTemplate.opsForHash().entries("hotKeys"))
加载热点数据 - 批量穿透优化:对多个未命中键使用
redis.mget(keys)
批量查询,减少网络往返次数
2. 写流程:数据一致性保障策略
策略对比与选型
策略 | 实现方式 | 一致性级别 | 适用场景 |
---|---|---|---|
同步更新 | 先更新数据库,再依次更新 Redis 和本地缓存 | 强一致 | 金融交易、库存管理 |
异步失效 | 先更新数据库,再发送消息通知缓存失效(如 Kafka 主题 cache-invalidate ) | 最终一致 | 商品信息、用户资料 |
版本戳校验 | 在缓存值中携带数据库版本号,读取时对比版本号,不一致则触发刷新 | 乐观一致 | 读多写少场景 |
异步失效实现示例
// 写操作后发布失效消息
@Transactional
public void updateUser(User user) {userRepository.save(user); // 先更新数据库kafkaTemplate.send("cache-invalidate", "user:" + user.getId()); // 发送失效通知
}// 缓存监听器消费消息
@KafkaListener(topics = "cache-invalidate")
public void handleInvalidate(String key) {localCache.invalidate(key); // 清理本地缓存redisTemplate.delete(key); // 清理 Redis 缓存
}
三、生产环境最佳实践深度指南
1. 集群部署与性能调优
节点间缓存一致性方案
方案 | 实现细节 | 延迟 / 吞吐量 |
---|---|---|
无状态本地缓存 | 各节点独立维护本地缓存,通过消息队列实现跨节点失效通知 | 低延迟 |
共享 Redis 缓存 | 本地缓存仅存储热点数据,温 / 冷数据统一存储在 Redis 集群 | 高吞吐量 |
混合部署 | 核心节点(如网关)部署大容量本地缓存,边缘节点仅使用 Redis 缓存 | 平衡方案 |
关键配置示例
# 一级缓存配置(application.properties)
caffeine.cache.spec: maximumSize=10000,expireAfterWrite=60s,refreshAfterWrite=30s# Redis 集群配置(redis.yml)
spring.redis.cluster.nodes: 192.168.1.1:7000,192.168.1.2:7001,192.168.1.3:7002
spring.redis.cluster.max-redirects: 3 # 集群重定向最大次数
2. 故障诊断与容灾策略
典型故障处理流程
场景 1:一级缓存击穿(大量请求绕过本地缓存)
- 现象:
localCache.stats().hitRate()
骤降至 30% 以下,Redis QPS 激增 - 诊断步骤
- 检查本地缓存是否因内存不足触发大规模淘汰(
maximumSize
设置过小) - 确认是否有异常线程频繁调用
localCache.invalidateAll()
- 检查本地缓存是否因内存不足触发大规模淘汰(
- 解决方案
- 扩大本地缓存容量:
maximumSize=20000
- 对高频失效键使用
refreshAfterWrite
而非invalidate
- 扩大本地缓存容量:
场景 2:三级缓存数据不一致
- 现象:数据库与缓存数据版本号不一致,导致业务逻辑错误
- 解决方案
- 启用分布式事务:通过 Seata 保证数据库与缓存更新的原子性
- 增加校验机制:读取缓存时调用
db.queryVersion(key)
对比版本号,不一致则强制刷新
容灾策略
- 一级缓存降级:当本地缓存故障时,直接访问 Redis(通过开关
local.cache.enabled=false
控制) - 二级缓存熔断:Redis 集群不可用时,启用本地缓存持久化(如 Caffeine 结合 RocksDB)临时存储数据
- 三级缓存限流:通过 Hystrix 限制数据库访问流量,防止缓存失效导致的雪崩
四、核心技术选型与对比
1. 一级缓存框架对比
维度 | Caffeine | Guava Cache | Ehcache |
---|---|---|---|
命中率 | ★★★★★(Window TinyLfu) | ★★★☆☆(LRU) | ★★★☆☆(LRU/LFU) |
异步支持 | 原生支持 CompletableFuture | 仅同步加载 | 通过自定义线程池实现 |
内存效率 | 高(权重计算 + 弱引用) | 中(固定容量) | 低(需额外配置堆外内存) |
Spring 集成 | 官方支持 | 需手动配置 | 提供 Spring Boot Starter |
选型建议:优先选择 Caffeine,尤其适合对命中率和异步加载要求高的场景
2. 二级缓存集群方案对比
方案 | Redis Cluster | Hazelcast | Apache Ignite |
---|---|---|---|
数据分片 | 哈希槽(16384 个) | 一致性哈希 | 范围分片 + 哈希分片 |
一致性模型 | AP(最终一致) | CP(强一致) | 可配置 AP/CP |
典型场景 | 分布式缓存 | 内存数据网格 | 实时分析 / 计算 |
带宽消耗 | 低(异步复制) | 中(同步复制) | 高(数据计算密集) |
选型建议:纯缓存场景首选 Redis Cluster,需强一致性时考虑 Hazelcast
五、高频面试题深度解析
1. 架构设计相关
问题:为什么需要多级缓存?单级缓存不足在哪里?
解析:
- 单级缓存(如 Redis)存在网络延迟瓶颈(RT 约 1ms),无法满足亚毫秒级响应需求
- 大流量下单一缓存层易成为性能瓶颈(如 Redis 单集群 QPS 上限约 10 万)
- 多级缓存通过分层过滤减少底层存储压力(如数据库访问量可降低 90% 以上)
问题:如何处理多级缓存的雪崩问题?
解决方案:
- 流量分层拦截:一级缓存拦截 70% 流量,二级缓存拦截 25%,避免全部压力集中在数据库
- 多级过期时间错峰:一级缓存 TTL=1 分钟,二级缓存 TTL=5 分钟,防止同时失效
- 熔断与降级:当数据库 QPS 超过阈值时,直接返回缓存数据(即使过期),保证服务可用性
2. 性能优化相关
问题:如何减少多级缓存的内存占用?
解决方案:
- 数据分级存储:
- 热数据(每日访问 > 1000 次)存一级缓存(堆内存)
- 温数据(每日访问 100-1000 次)存二级缓存(Redis)
- 冷数据(每日访问 < 100 次)存数据库
- 压缩存储:对大对象(如图片二进制数据)在 Redis 中使用 LZF 压缩(压缩比约 3:1)
- 淘汰策略优化:一级缓存使用 TinyLfu 淘汰低频数据,二级缓存使用 allkeys-lru 淘汰冷数据
六、高级特性深度应用
1. 灰度发布与缓存路由
按用户标签路由缓存
// 根据用户分组(如 vip/普通用户)路由至不同缓存层级
public Object getByGroup(String key, String group) {if ("vip".equals(group)) {return vipLocalCache.get(key); // VIP 用户优先访问一级缓存} else {return commonRedisCache.get(key); // 普通用户直接访问 Redis}
}
灰度发布缓存切换
# 步骤1:部署新版本时,先将 10% 流量路由至新缓存集群
nginx.conf:
upstream cache_cluster {server new-cache-node:6379 weight=1;server old-cache-node:6379 weight=9;
}# 步骤2:验证无误后,逐步增加新集群权重至 100%
2. 监控指标体系构建
核心监控指标
层级 | 指标名称 | 采集方式 | 告警阈值 |
---|---|---|---|
一级缓存 | 命中率(hitRate) | localCache.stats().hitRate() | <60% 触发告警 |
内存占用率 | JVM 堆内存监控(如 Prometheus jvm_memory_used_bytes) | >80% 触发内存优化 | |
二级缓存 | 集群节点存活率 | Redis INFO replication 中的 master_link_status | <100% 触发故障转移 |
网络延迟(RT) | Redis 监控工具(如 redis-stat) | >2ms 触发网络优化 | |
三级缓存 | 慢查询数量 | 数据库慢查询日志 | >100 次 / 分钟 触发优化 |
总结与展望
本文通过对多级缓存架构的分层设计、流程优化与生产实践的深入解析,揭示了其在高并发场景下的核心价值:通过 “本地缓存抗流量、分布式缓存削峰值、数据库兜底” 的三级防护体系,实现了性能、成本与稳定性的平衡。在实际落地中,需结合业务数据特征动态调整缓存策略,并通过全链路监控及时发现潜在风险。
未来多级缓存的发展将呈现以下趋势:
- 智能化缓存管理:引入机器学习预测热点数据,自动调整缓存容量与过期时间
- 边缘缓存下沉:在边缘节点部署本地缓存,减少中心集群压力(如 CDN 节点集成 Caffeine)
- 异构存储融合:结合 SSD/NVMe 等新型存储介质,构建 “内存 + 闪存” 混合缓存层
缓存的设计与优化技巧,不仅能提升系统的吞吐量与响应速度,更为构建弹性可扩展的云原生架构提供了关键技术支撑。
相关文章:
多级缓存架构深度解析:从设计原理到生产实践
多级缓存架构深度解析:从设计原理到生产实践 一、多级缓存架构核心定位与设计原则 1. 架构分层与角色定位 多级缓存通过分层存储、流量削峰、数据分级实现性能与成本的平衡,典型三层架构如下: 层级代表组件存储介质数据特征命中目标成本级…...
(51单片机)LCD展示动画(延时函数)(LLCD1602教程)
前言: 前面我们说过,之前LCD1602模块有点难,但是现在,我们通过几遍博客的学习,今天来讲一下LCD1602的原理 演示视频: LCD1602流动 源代码: main.c #include <STC89C5xRC.H> #include &q…...
12N60-ASEMI无人机专用功率器件12N60
编辑:LL 12N60-ASEMI无人机专用功率器件12N60 型号:12N60 品牌:ASEMI 封装:TO-220F 最大漏源电流:12A 漏源击穿电压:600V 批号:最新 RDS(ON)Max:0.68…...
[Redis] Redis最佳实践
🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏: 🧊 Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 🍕 Collection与…...
arm64适配系列文章-第九章-arm64环境上sentinel的部署
ARM64适配系列文章 第一章 arm64环境上kubesphere和k8s的部署 第二章 arm64环境上nfs-subdir-external-provisioner的部署 第三章 arm64环境上mariadb的部署 第四章 arm64环境上nacos的部署 第五章 arm64环境上redis的部署 第六章 arm64环境上rabbitmq-management的部署 第七章…...
3dmax模型怎么处理3dtiles,制作制作B3DM格式文件
1咱们先打3dmax,或su或者其他软件建模型 2记住面一定一定要少,面一定不能多,也不要是VR材质,可以用插件一键处理 3导出fbx 4使用cesium把fbx转换 5这里可以坐标,因为要对地图位置 6转换出来了,3dtiles格式…...
雪花算法生成int64,在前端js的精度问题
1.问题背景 后端对视频生成唯一性id,在发送评论阶段,由于后端接收的json数据格式,设置videoId为int64。前端于是使用js的Number函数,进行字符串转换为数字,由于不清楚js的精度范围,产生了携带的videoId变化…...
软件测试报告包括哪些内容?可出专业软件测试方案的测评机构推荐
随着信息技术的快速发展,软件质量已经成为决定企业竞争力的重要因素之一。软件测试作为保障软件质量的关键环节,其成果汇总形成的“软件测试报告”在项目生命周期中扮演着重要角色。 软件测试报告就是用来反映测试工作全貌的报告。从测试准备、过程、结…...
dockercompose文件仓库
mysql version: 3 # 使用docker-compose的版本,根据需要可以调整# 创建数据目录 # mkdir -p /home/docker/mysql/mysql_data # mkdir -p /home/docker/mysql/mysql_logs # 给予适当的权限(确保MySQL容器可以读写这些目录) # chmod 777 /ho…...
Docker 的基本概念和优势以及在应用程序开发中的实际应用
Docker 是一种开源的容器化平台,可以让开发者将应用程序及其所有依赖项打包成一个独立的容器,从而实现应用程序的快速部署和运行。下面是 Docker 的基本概念和优势: 基本概念: 容器:一个轻量级、独立的运行环境,包含应用程序及其所有依赖项。镜像:一个只读的模板,用于创…...
JavaWeb:HtmlCss
快速入门 <html><head><title>HTML快速入门</title><head><body><h1>Hello HTML</h1><img src"1.png"></img></body> </html>开发工具vscode 常见便签&样式(新闻࿰…...
linux centOS7.9 No package docker-ce available
docker pull apache/apisix:3.2.2-centos Error response from daemon: missing signature key 处理方式如下: 问题:在纯净机里安装docker时报错No package docker-ce available。 解决办法: 1、更新yum,使用yum -y upgrade&#…...
机器学习(8)——主成分分析
文章目录 1. 主成分分析介绍2. 核心思想3. 数学基础4. 算法步骤4.1. 数据标准化:4.2. 计算协方差矩阵:4.3. 特征分解:4.4. 选择主成分:4.5 降维: 5. 关键参数6. 优缺点7. 改进变种8. 应用场景9. Python示例10. 数学推导…...
使用深度 Q 学习解决Lunar lander问题
使用深度 Q 学习解决Lunar lander问题 0. 前言1. 使用深度 Q 网络解决 Atari 游戏2. 定义环境3. 解决 Lunar lander 问题相关链接 0. 前言 深度 Q 学习模型只需观察状态作为输入就能够解决经典 Atari 游戏,这是一个重大突破,从那时起,深度强…...
centos7使用yum快速安装最新版本Jenkins-2.462.3
Jenkins支持多种安装方式:yum安装、war包安装、Docker安装等。 官方下载地址:https://www.jenkins.io/zh/download 本次实验使用yum方式安装Jenkins LTS长期支持版,版本为 2.462.3。 一、Jenkins基础环境的安装与配置 1.1:基本…...
Bean的生命周期
1.实例化Bean(通过BeanDefinition反射调用无参构造创建对象,如果没有无参构造,需要指定唯一构造方法) 2.给Bean的属性set()赋值 3.检查Bean是否实现了Aware相关接口,实现的话则执行方法 Aware接口:空接口&…...
【缓存与数据库结合方案】伪从技术 vs 直接同步/MQ方案的深度对比
伪从技术 vs 直接同步/MQ方案的深度对比 直接同步修改或通过MQ消息队列也能实现类似同步功能,但伪从技术(通过消费binlog实现数据同步)在某些场景下具有独特优势。下面我将从多个维度进行详细对比分析: 一、核心差异对比表 方案…...
【前端】【业务场景】【面试】在前端开发中,如何实现文件的上传与下载功能,并且处理可能出现的错误情况?
前端文件上传与下载攻略 本文目标:帮你快速掌握文件上传 & 下载的核心实现方式,并在常见出错场景下保持“优雅不崩溃”。 一、文件上传 1. 基础结构 <input type"file" id"fileInput" /> <button id"uploadBtn&…...
【axios取消请求】如何在token过期后取消未响应的请求
功能背景: 我们在实际项目中通常会遇到登录过期后会跳登录页的情况,回跳过程会根据接口请求的状态码判断是否登陆状态过期,并给出用户提示,如果此时存在多个请求接口同时调用,就会同时报出多个登录过期的提示…...
【高频考点精讲】JavaScript中的组合模式:从树形结构到组件嵌套实战
📚 目录 📦 什么是组合模式?🌲 基础版:用组合模式构建一个简单的树形结构💡 举个更真实的场景:菜单组件🧠 为什么组合模式在前端特别重要?🔨 实战案例:组件嵌套组合 + 权限控制🧩 组合模式的延伸用法:搭建 UI DSL 引擎🧪 面试题时间(欢迎评论区作答)组…...
《仙剑奇侠传二》游戏秘籍
无限冥纸:在丰都城,点击特定的小猫,它会给你五张冥纸,再次点击还会再给五张,可循环获取。无限使用虎煞技能:学会 “虎啸风声” 技能后,将虎煞之力值设置为 16,在战斗中持续使用该技能…...
AWS 中国区 CloudFront SSL 证书到期更换实战指南
适用场景: AWS 中国区(宁夏区域 cn-northwest-1 或北京区域 cn-north-1)CloudFront 分配的 SSL 证书到期后无缝替换,域名主体为 domain.cn。 背景与痛点 当 CloudFront 使用的 SSL 证书即将到期时,需手动替换新证书以避免服务中断。由于 AWS 中国区 不支持 ACM 证书,必须…...
【2025A卷】华为OD机试九日集训第3期 - 按算法分类,由易到难,提升编程能力和解题技巧,从而提高机试通过率(Python/JS/C/C++)
目录 一、适合人群二、本期训练时间三、如何参加四、数据结构与算法大纲五、华为OD九日集训第3期第1天、逻辑分析第2天、逻辑分析第3天、双指针第4天、双指针第5天、数据结构map第6天、栈第7天、二叉树第8天、贪心算法第9天、二分查找 六、集训总结国内直接使用最新o3、o4-mini…...
MacOS上如何运行内网穿透详细教程
本文以市面常见、好用的内网穿透为例,一款为开源内网穿透工具Frp;另一款为国产新锐软件ZeroNews。 一、Frp(开源工作、使用自由) 1. 下载 FRP 访问 FRP 的 GitHub 发布页: https://github.com/fatedier/frp/releases 选择适合 …...
第55讲:农业人工智能的跨学科融合与社会影响——构建更加可持续、包容的农业社会
目录 一、农业人工智能的多维融合:科技与社会的桥梁 1. 技术与社会:解决现代农业中的不平等 2. AI与伦理:塑造道德规范与社会责任 3. AI与政策:推动农业政策的科学决策与智能执行 二、AI与农业未来社会的构建:更绿色、更智能、更包容 1. 推动农业可持续发展:绿色农…...
JVM性能优化之老年代参数设置
一、引言 咱们书接上回,上篇文章主要讲解了年轻代参数设置,如果对这一部分还不清楚的建议先去看一下(年轻代参数设置),本文主要为大家介绍老年代参数的设置,掌握好jvm参数的设置是一个高级开发人人员必备的…...
在 Ubuntu 环境为 Elasticsearch 引入 `icu_tokenizer
1. 为什么需要 ICU 分析插件 Elasticsearch 默认的 standard tokenizer 遵循 UAX #29 规则,但在 CJK(中、日、韩)等亚洲语言上仅能按字符切分,无法识别词边界;对包含重音符号、大小写或多脚本混排的文本也缺乏统一归一…...
JMeter 安装及使用 [软件测试工具]
目录 JMeter 1. JMeter 安装 1.1 点击官网下载: JMeter官网下载 1.2 下载后解压即可 1.3 打开 JMeter 1.3.1 方式一: 点击对应程序打开 1.3.2 方式二: 命令行启动 1.4 关闭 JMeter 2. JMeter 基础配置 2.1 修改字体为简体中文 2.2 添加拓展插件 2.2.1 下载其他监听器…...
Unity 资源合理性检测
一:表格过度配置,表格资源是否在工程中存在,并输出不存在的资源 import pandas as pd import glob import osassets [] count 0# 遍历configs文件夹下所有xlsx文件 for file_path in glob.glob(configs/*.xlsx):count 1try:sheets pd.re…...
vue-study(1)
黑马智数项目 黑马智数是一个数字化园区管理项目,该项目后台可以在线管理园区内的楼宇、企业、车辆和一体杆等资源,可视化大屏通过园区3D模型实时展示园区概况。通过该项目能学到如何用qiankun搭建微前端架构、用Echarts进行数据可视化、以及前沿的3D模…...
XS5032:高性能3DNR+HDR ISP-TX 2K芯片
爱芯元智 XS5032:高性能3DNRHDR ISP-TX 2K芯片 视频输入 支持MIPI接口,4lane,Max.1.5Gbps/lane 支持Sensor并口(DVP) 视频分辨率 支持多种同轴高清制式和标清制式,包括: 960H25/30fps&…...
[原创](现代Delphi 12指南):[macOS 64bit App开发]:如何使用NSString类型字符串?
[作者] 常用网名: 猪头三 出生日期: 1981.XX.XX 企鹅交流: 643439947 个人网站: 80x86汇编小站 编程生涯: 2001年~至今[共24年] 职业生涯: 22年 开发语言: C/C++、80x86ASM、Object Pascal、Objective-C、C#、R、Python、PHP、Perl、 开发工具: Visual Studio、Delphi、XCode、…...
TDengine 流计算引擎设计
流计算架构 TDengine 流计算的架构如下图所示。当用户输入用于创建流的 SQL 后,首先,该 SQL 将在客户端进行解析,并生成流计算执行所需的逻辑执行计划及其相关属性信息。其次,客户端将这些信息发送至 mnode。mnode 利用来自数据源…...
扩展中国剩余定理
中国剩余定理 中国剩余定理 考虑一组模线性同余方程: { x ≡ a 1 ( m o d m 1 ) x ≡ a 2 ( m o d m 2 ) . . . x ≡ a k ( m o d m k ) \begin{cases} x\equiv a_1\pmod{m1} \\ x\equiv a_2\pmod{m2}\\ .\\ .\\ .\\ x\equiv a_k\pmod{mk}\\ \end{cases} ⎩ ⎨ ⎧…...
git检查提交分支和package.json的version版本是否一致
这里写自定义目录标题 一、核心实现步骤1.安装必要依赖2.初始化 Husky3.创建校验脚本4.配置 lint-staged5.更新 Husky 钩子 三、工作流程说明四、注意事项 以下是基于 Git Hooks 的完整解决方案,通过 husky 和自定义脚本实现分支名与版本号一致性校…...
Git 详细使用说明文档(适合小白)
Git 详细使用说明文档(适合小白) 1. 什么是 Git? Git 是一个版本控制系统,帮助你管理和跟踪代码的变更。无论是个人项目还是团队协作,Git 都能帮助你记录代码的历史版本,方便回溯和协作。 2. 安装 Git …...
【嵌入式系统设计师(软考中级)】第二章:嵌入式系统硬件基础知识(2)
文章目录 3.嵌入式系统的存储体系3.1 存储系统的层次结构3.2 内存管理单元(MMU)3.3 RAM和ROM的种类3.3.1 RAM类型对比3.3.2 ROM类型对比 3.4 高速缓存(Cache)3.5 其他存储设备3.5.1 新型存储技术3.5.2 外存接口技术 3.嵌入式系统的…...
rk3588 驱动开发(三)第五章 新字符设备驱动实验
register_chrdev 和 unregister_chrdev 这两个函数是老版本驱动使用的函数,现在新的字符设备驱动已经不再使用这两个函数,而是使用 Linux 内核推荐的新字符设备驱动 API 函数。本节我们就来学习一下如何编写新字符设备驱动,并且在驱动模块加载…...
文件上传--WAF绕过干货
本文主要内容 绕过WAF上传文件 -- 安全狗 -- 宝塔 Burp抓包解析 #上传参数名解析:明确哪些东西能修改? Content-Disposition:—般可更改 name:表单参数值,不能更改 filename:文件名ÿ…...
BERT BERT
BERT ***** 2020年3月11日更新:更小的BERT模型 ***** 这是在《深阅读的学生学得更好:预训练紧凑模型的重要性》(arXiv:1908.08962)中提到的24种较小规模的英文未分词BERT模型的发布。 我们已经证明,标准的BERT架构和…...
Kotlin Multiplatform--02:项目结构进阶
Kotlin Multiplatform--02:项目结构进阶 引言正文 引言 在上一章中,我们对 Kotlin Multiplatform 项目有了基本的了解,已经可以进行开发了。但我们只是使用了系统默认的项目结构。本章介绍了如何进行更复杂的项目结构管理。 正文 在上一章中&…...
【ES实战】Elasticsearch中模糊匹配类的查询
Elasticsearch中模糊匹配类的查询 文章目录 Elasticsearch中模糊匹配类的查询通配符查询前缀匹配查询正则匹配查询标准的正则操作特殊运算符操作 模糊化查询Fuzziness text类型同时配置keyword类型 Elasticsearch中模糊类查询主要有以下 Wildcard Query:通配符查询P…...
纯真社区IP库离线版发布更新
纯真社区IP库离线版发布更新 发布者:技术分享 2005年,随着中国互联网的蓬勃发展,纯真IP库诞生了。作为全球网络空间地理测绘技术的领先者,纯真开源项目为中国互联网行业提供了高质量的网络空间IP库数据。纯真IP库目前已经覆盖超…...
直接偏好优化(Direct Preference Optimization,DPO):论文与源码解析
简介 虽然大规模无监督语言模型(LMs)学习了广泛的世界知识和一些推理技能,但由于它们是基于完全无监督训练,仍很难控制其行为。 微调无监督LM使其对齐偏好,尽管大规模无监督的语言模型(LMs)能…...
uniapp-商城-34-shop 购物车 选好了 进行订单确认
在shop页面选中商品添加到购物车,可选好后,进行确认和支付。具体呈现在shop页面。 1 购物车栏 shop页面代码: 购物车代码: 代码: <template><view><view class"carlayout"><!-- 车里…...
Kafka命令行的使用/Spark-Streaming核心编程(二)
Kafka命令行的使用 创建topic kafka-topics.sh --create --zookeeper node01:2181,node02:2181,node03:2181 --topic test1 --partitions 3 --replication-factor 3 分区数量,副本数量,都是必须的。 数据的形式: 主题名称-分区编号。 在…...
虚拟机详解
虚拟机详解 1. 虚拟机(Virtual Machine)的定义 系统虚拟机:通过软件模拟完整计算机系统(CPU、内存、外设等),如 VMware、VirtualBox。进程级虚拟机:为单个应用提供虚拟执行环境,如 …...
NOIP2013 提高组.转圈游戏
目录 题目算法标签: 数论, 模运算思路代码 题目 504. 转圈游戏 算法标签: 数论, 模运算 思路 看题意不难看出, 计算的是 ( x 1 0 k m ) m o d n (x 10 ^ k \times m) \mod n (x10km)modn, 如果直接计算一定会超时, 因此可以使用快速幂进行优化 代码 #include <iost…...
【金仓数据库征文】加速数字化转型:金仓数据库在金融与能源领域强势崛起
目录 一、引言 二、金仓数据库(KingbaseES)概述 1. 发展历程与市场地位 2. 核心技术架构 3. 金仓数据库的特点 三、金仓数据库在金融行业的应用 1. 金融行业的挑战与需求 2. 金仓数据库在金融行业的优势 3. 金仓数据库在金融行业的实际应用案例 …...
济南国网数字化培训班学习笔记-第二组-5节-输电线路设计
输电线路设计 工程设计阶段划分 35kv及以上输变电工程勘测设计全过程 可行性研究(包括规划、工程选站)(包括电力系统一次二次,站址选择及工程设想,线路工程选择及工程设想,节能降耗分析,环境…...