深入浅出 Redis:核心数据结构解析与应用场景Redis 数据结构
引言:Redis 为何如此之快?数据结构是关键
Redis (Remote Dictionary Server) 作为一款高性能的内存键值数据库,凭借其闪电般的速度和丰富的功能,在缓存、消息队列、排行榜等众多场景中得到了广泛应用。除了基于内存存储这一核心优势外,Redis 高效的底层数据结构设计是其高性能的关键所在。
理解 Redis 的核心数据结构,不仅能帮助我们更高效地使用 Redis,还能在面对复杂业务场景时,做出更优的技术选型。本文将带你深入了解 Redis 最常用的五种基本数据结构及其内部实现,并探讨它们的典型应用场景。
一、字符串 (String):最基础也最万能
字符串是 Redis 最基础的数据类型,也是其他复杂数据结构的基础。但 Redis 的字符串并非 C 语言中的普通字符串 (char*),而是自己构建的一种名为 简单动态字符串 (Simple Dynamic String, SDS) 的结构。
-
内部实现: SDS 结构包含 len (已用长度)、alloc (已分配空间) 和 buf (字节数组) 等字段。
- O(1) 获取长度: len 字段使得获取字符串长度的时间复杂度为 O(1)。
- 杜绝缓冲区溢出: alloc 字段记录了已分配空间,修改 SDS 时会检查空间是否足够,不足则先扩展,避免了 C 字符串常见的溢出风险。
- 减少内存重分配次数: SDS 采用空间预分配(修改后如果 len 小于 1MB,则分配 len*2 的空间;如果大于 1MB,则额外分配 1MB)和惰性空间释放(缩短字符串时不立即回收多余空间)策略,减少了内存重分配的开销。
- 二进制安全: SDS 使用 len 字段判断结束,而非空字符 \0,因此可以存储包含 \0 在内的任意二进制数据。
-
常用命令: SET, GET, INCR, DECR, STRLEN, APPEND, GETSET, MSET, MGET 等。
-
应用场景:
- 缓存: 缓存用户信息、配置信息、页面片段等。
- 计数器/限流器: INCR 命令原子性地增加数值,非常适合做计数器(如文章阅读量)或简单的限流控制。
- 分布式锁: 利用 SETNX (Set if Not Exists) 实现简单的分布式锁。
- 存储 Session 信息。
二、列表 (List):有序的队列与栈
Redis 的列表是一种有序的字符串集合,按照插入顺序排序。你可以在列表的头部(左边)或尾部(右边)添加元素。
-
内部实现:
- 在 Redis 3.2 之前,列表底层采用 双向链表 (Linked List) 或 压缩列表 (ZipList) 实现。当元素数量较少且每个元素大小不大时,使用 ZipList 以节省内存;否则使用 Linked List。
- 在 Redis 3.2 及之后,引入了 快速列表 (QuickList) 作为列表的底层实现。QuickList 是 Linked List 和 ZipList 的混合体,它将一个双向链表中的每个节点都设置为一个 ZipList,从而在空间效率和时间效率之间取得了更好的平衡。
-
特点: 允许存储重复元素,插入和删除操作快(头尾 O(1)),但索引定位较慢(O(N))。
-
常用命令: LPUSH, RPUSH, LPOP, RPOP, LRANGE, LINDEX, LLEN, BLPOP, BRPOP (阻塞式弹出) 等。
-
应用场景:
- 消息队列: 利用 LPUSH 生产消息,RPOP (或 BRPOP) 消费消息,实现简单的消息队列。
- 时间线/最新列表: 比如用户发布的最新微博、网站的最新动态等,使用 LPUSH 添加,LRANGE 获取。
- 栈: LPUSH + LPOP 或 RPUSH + RPOP 可以模拟栈的行为。
三、哈希 (Hash):结构化存储的利器
哈希类型(也称为散列或字典)是一个键值对集合,特别适合用于存储对象。可以看作是 Value 为 String 的 Map。
-
内部实现:
- 底层同样可以采用 压缩列表 (ZipList) 或 哈希表 (Hash Table) 实现。当键值对数量较少且键和值的大小不大时,使用 ZipList;否则使用 Hash Table。
- Hash Table 的实现方式与 java.util.HashMap 类似,采用数组 + 链表(或红黑树,在冲突过多时)的方式解决哈希冲突。Redis 的 Hash Table 在扩容/缩容时采用了渐进式 rehash,避免了单次 rehash 成本过高导致服务阻塞。
-
特点: 适合存储结构化数据,如一个对象的多个属性。可以对单个字段进行读写。
-
常用命令: HSET, HGET, HMSET, HMGET, HGETALL, HDEL, HLEN, HINCRBY, HEXISTS 等。
-
应用场景:
- 缓存对象信息: 存储用户信息(用户名、年龄、邮箱等)、商品信息(名称、价格、库存等)。相比于将对象序列化后用 String 存储,Hash 可以只修改或获取对象的某个字段,更灵活高效。
- 购物车: 用户 ID 为 Key,商品 ID 为 field,商品数量为 value。
四、集合 (Set):无序且唯一的元素
集合是 String 类型的无序集合,集合中的元素是唯一的,不允许重复。
-
内部实现:
- 底层采用 哈希表 (Hash Table) 或 整数集合 (IntSet) 实现。当所有元素都是整数且元素数量不多时,使用 IntSet 以节省内存;否则使用 Hash Table。
- 使用 Hash Table 实现时,所有 Value 都指向一个 NULL 指针,只利用 Key 来保证唯一性。
-
特点: 元素唯一、无序。支持高效的集合间运算(交集、并集、差集)。
-
常用命令: SADD, SREM, SMEMBERS, SISMEMBER, SCARD (获取基数), SINTER (交集), SUNION (并集), SDIFF (差集), SRANDMEMBER (随机获取元素) 等。
-
应用场景:
- 标签系统: 给用户或内容打标签。一个标签下的所有用户/内容 ID 可以存储在一个 Set 中。
- 共同好友/共同关注: 利用 SINTER 计算两个用户关注列表的交集。
- 抽奖系统: 使用 SADD 添加参与用户,SRANDMEMBER 或 SPOP 抽取中奖用户。
- 去重: 利用 Set 元素唯一的特性进行数据去重。
五、有序集合 (Sorted Set / ZSet):带权重的集合
有序集合和集合类似,也是 String 类型的元素的集合,且不允许重复。但不同的是,每个元素都会关联一个 double 类型的分数 (score)。Redis 正是通过分数来为集合中的成员进行从小到大的排序。
-
内部实现:
- 底层可以采用 压缩列表 (ZipList) 或 跳跃表 (Skip List) + 哈希表 (Hash Table) 的组合实现。当元素数量较少且元素和分数大小不大时,使用 ZipList;否则使用 Skip List + Hash Table。
- Skip List: 用于保证元素的有序性,支持平均 O(logN) 复杂度的查找、插入、删除操作,以及范围查找。
- Hash Table: 用于存储元素到分数的映射,保证 O(1) 复杂度获取指定元素的分数。两者结合,既能高效排序,又能快速查找单个元素。
-
特点: 元素唯一、有序(根据 score)。支持根据分数范围或元素字典序范围进行查找。
-
常用命令: ZADD, ZREM, ZRANGE (按分数范围查), ZREVRANGE (按分数倒序查), ZRANGEBYSCORE, ZCARD, ZSCORE, ZINCRBY, ZRANK (获取排名), ZREMRANGEBYSCORE 等。
-
应用场景:
- 排行榜: 如游戏积分榜、热门帖子排行等。ZADD 更新分数,ZRANGE 或 ZREVRANGE 获取排名。
- 带权重的消息队列: 可以用分数表示优先级或时间戳。
- 范围查找: 如查找某个价格区间或时间范围内的商品/数据。
Redis 6.0 及之后的新结构(简述)
除了上述五种基本结构,Redis 后续版本还引入了一些更专门化的数据结构:
- Bitmaps (位图): 底层是 String,但可以对位的级别进行操作。适合用于状态统计(如用户签到、活跃状态)。
- HyperLogLog: 基于概率的基数统计,占用空间极小(固定 12KB),用于计算海量数据的独立用户数等(允许一定误差)。
- Geospatial (GEO): 存储地理位置信息,并支持半径查询等操作。底层是 ZSet。
- Streams (流): Redis 5.0 引入的强大的消息队列模型,支持消费组、持久化、阻塞读取等。
如何选择合适的数据结构?
- 需要缓存简单键值对或进行计数 -> String
- 需要存储列表并保持顺序,如消息队列、时间线 -> List
- 需要存储结构化对象信息 -> Hash
- 需要存储唯一元素,进行集合运算或去重 -> Set
- 需要存储有序且唯一的元素,如排行榜 -> Sorted Set (ZSet)
- 需要进行大量的位操作或状态统计 -> Bitmap
- 需要对海量数据进行基数统计(允许误差) -> HyperLogLog
- 需要存储地理位置并进行范围查询 -> GEO
- 需要构建可靠的消息队列系统 -> Stream
结语
Redis 高效的底层数据结构是其高性能的核心秘密之一。深入理解 String (SDS)、List (QuickList)、Hash (HashTable/ZipList)、Set (HashTable/IntSet) 和 Sorted Set (SkipList+HashTable/ZipList) 的内部实现和特点,可以帮助我们更好地利用 Redis 的优势,设计出更健壮、更高效的应用程序。在实际应用中,根据具体的业务场景选择最合适的数据结构,是发挥 Redis 最大效能的关键。
相关文章:
深入浅出 Redis:核心数据结构解析与应用场景Redis 数据结构
引言:Redis 为何如此之快?数据结构是关键 Redis (Remote Dictionary Server) 作为一款高性能的内存键值数据库,凭借其闪电般的速度和丰富的功能,在缓存、消息队列、排行榜等众多场景中得到了广泛应用。除了基于内存存储这一核心优…...
告别昂贵语音合成服务!用GPT-SoVITS生成你的个性化AI语音
文章目录 前言1.GPT-SoVITS V2下载2.本地运行GPT-SoVITS V23.简单使用演示4.安装内网穿透工具4.1 创建远程连接公网地址 5. 固定远程访问公网地址 前言 今天给大家介绍一款AI语音克隆工具——GPT-SoVITS。这款由花儿不哭大佬开发的工具是一款强大的训练声音模型与音频生成工具…...
前沿要塞:Vue组件安全工程的防御体系重构与技术突围
总章数字世界的钢铁长城 在某个凌晨3点的红蓝对抗演练中,某电商平台因组件级XSS漏洞导致千万级用户数据泄露。这不是虚构的灾难场景,而是2023年某A轮企业的真实遭遇。当传统安全方案在新型攻击面前节节败退时,我们需要为Vue组件铸造全新的数字…...
吴恩达深度学习复盘(19)XGBoost简介|神经网络与决策树
XGBoost 多年来,机器学习研究人员提出了许多构建决策树的方法,目前最常用的方法是对样本或决策树的实现收费。其中,XGBoost 是一种非常快速且易于使用的开源实现,已成功用于赢得许多机器学习竞赛和商业应用。 算法原理 基本思想…...
Docker部署禅道21.6开源版本
将数据库相关环境变量分开,增加注释或空格使得命令更易读。 如果你的 MySQL 主机、端口等配置没有变化,应该确保这些信息是安全的,并考虑使用 Docker secrets 或环境变量配置来避免直接暴露敏感信息。 docker run -d -it --privilegedtrue …...
《MySQL:MySQL表结构的基本操作》
创建表 CREATE TABLE table_name ( field1 datatype, field2 datatype, field3 datatype ) character set 字符集 collate 校验规则 engine 存储引擎; field 表示列名 datatype 表示列的类型 character set 字符集,如果没有指定字符集,则以所在数据…...
C++解析操作mat文件方法-基于vs2019
前言 工作中需要将C#脚本转为C++,所转脚本主要功能是进行mat数据文件的解析和矩阵运算。 1.C#版本 原C#脚本主要是基于 MathNet.Numerics.data.Matlab、MathNet.Numerics.LineAlgebra.Double、 MathNet.Numerics.LineAlgebra 中的MatlabReader、DenseMatrix、Matrix进行mat文…...
OpenCV 模板匹配方法详解
文章目录 1. 什么是模板匹配?2. 模板匹配的原理2.1数学表达 3. OpenCV 实现模板匹配3.1基本步骤 4. 模板匹配的局限性5. 总结 1. 什么是模板匹配? 模板匹配(Template Matching)是计算机视觉中的一种基础技术,用于在目…...
自已实现一个远程打印方案 解决小程序或APP在外面控制本地电脑打印实现
常规通过小程序或APP在外出时控制本地电脑实现打印功能,可以结合远程桌面技术、云打印服务或开发定制化的远程打印解决方案。 但这里我们采用自已的实现方案来解决 服务器端实现 搭建一个后端socket服务,监听来自手机的打印请求。监听到打印任务后向本…...
Oracle_00000
contents 基本使用 基本使用 Oracle安装后会自动创建sys和system这两个用户。 sys用户:具有最高权限。具有sysdba角色,有create database的权限。该用户默认密码是:manager system用户:管理员用户,具有sysoper角色。没…...
深入剖析 ORM:原理、优缺点、场景及多语言框架示例
ORM 即对象关系映射(Object Relational Mapping),它是一种编程技术,其作用是在面向对象编程语言里,把对象模型和关系型数据库的数据结构之间创建起映射,这样开发者就能够使用面向对象的方式来操作数据库&am…...
ARINC818协议-持续
一、帧头帧尾 SOF 和 EOF 分别代表视频帧传输的开始与结束,它们在封装过程有多种状态,SOF 分为 SOFi 和 SOFn,EOF 分为 EOFt 和 EOFn。传输系统中的视频信息包括像素数据信 息和辅助数据信息,分别存储在有效数据中的对象 0 和对象…...
【uniapp】uni.setClipboardData 方法失效 bug 解决方案
写了一个 copy 方法,但是怎么也没有弹窗复制成功 <text click"toCopy(myInfo.id)">复制 </text> 逐步打印发现 1 正常打印,2 没有打印,说明问题出现在 setClipboardData 方法执行中 toCopy(n) {// console.log(1,ty…...
智能sc一面
智能sc一面-2025/4/17 更多完善:真实面经 Java 的异常分类 异常分为两类,一类Error,一类Execption。这两个类都是Throwable的子类,只有继承Throwable 的类才可以被throw或者catch Error: 表示严重的系统问题,通常与代码无关&am…...
SAP HANA使用命令行快速导出导入
楔子 今天折腾了接近一下午,就为了使用SAP HANA自带的命令行工具来导出数据备份。 SAP HANA(后续简称Hana)是内存数据库,性能这一方面上还真没怕过谁。 由于SAP HANA提供了Hana Studio这个桌面工具来方便运维和DBA使用…...
Oracle DBMS_SCHEDULER 与 DBMS_JOB 的对比
Oracle DBMS_SCHEDULER 与 DBMS_JOB 的对比 一 基本概述对比 特性DBMS_JOB (旧版)DBMS_SCHEDULER (新版)引入版本Oracle 7 (1992年)Oracle 10g R1 (2003年)当前状态已过时但仍支持推荐使用的标准设计目的基础作业调度企业级作业调度系统 二 功能特性对比 2.1 作业定义能力 …...
【音视频】音视频FLV合成实战
FFmpeg合成流程 示例本程序会⽣成⼀个合成的⾳频和视频流,并将它们编码和封装输出到输出⽂件,输出格式是根据⽂件扩展名⾃动猜测的。 示例的流程图如下所示。 ffmpeg 的 Mux 主要分为 三步操作: avformat_write_header : 写⽂件…...
10.(vue3.x+vite)div实现tooltip功能(css实现)
1:效果截图 2:代码实现 <template><div><div class="tooltip" style="margin-top: 20%; margin-left: 20%; background-color: blueviolet; color: white;...
代码随想录算法训练营第三十七天| 52. 携带研究材料 518.零钱兑换II 377. 组合总和 Ⅳ 70. 爬楼梯(进阶版)
[TOC](代码随想录算法训练营第三十七天| 52. 携带研究材料 518.零钱兑换II 377. 组合总和 Ⅳ 70. 爬楼梯(进阶版) ) 入营第三十七天 难度:难 计划任务 完成任务 52. 携带研究材料 动态规划五部曲: 1.确定dp数组以及下标含义 dp[i][j]表示从下标[0-i]的…...
数智化招标采购系统分类及功能亮点
数智化招标采购系统是郑州信源公司运用“互联网”、大数据、人工智能、区块链、物联网等新兴技术,结合供应链管理理念,以招标采购为核心,提供交易、管理、数据、服务、监管为一体的高标准采购管理平台,赋能政企用户实现采购业务全…...
CSS appearance 属性:掌握UI元素的原生外观
在现代网页设计中,为了达到一致的用户体验,我们有时需要让HTML元素模仿操作系统的默认控件样式。CSS中的appearance属性提供了一种简便的方式来控制这些元素是否以及如何显示其默认外观。本文将详细介绍appearance属性,并通过实际代码示例来展…...
【JavaScript】二十四、JS的执行机制事件循环 + location + navigator + history
文章目录 1、JS执行机制(事件循环eventloop)2、BOM的window3、location对象3.1 href属性3.2 search属性3.3 hash属性3.4 reload方法 4、navigator对象5、history对象 1、JS执行机制(事件循环eventloop) 以下,两段代码…...
CSS核心笔记002
margin塌陷问题 第一个子元素的上margin会作用在父元素上, 最后一个子元素的下margin会作用在父元素上解决 1. 给父元素设置 不为0的pandding 2. 给父元素设置宽度不为0 的border 3. 给父元素设置样式 overflow:hiddenmargin合并问题 兄弟元素的下外margin和会下面兄弟的上…...
前端路由缓存实现
场景:以一体化为例:目前页面涉及页签和大量菜单路由,用户想要实现页面缓存,即列表页、详情页甚至是编辑弹框页都要实现数据缓存。 方案:使用router-view的keep-alive实现 。 一、实现思路 1.需求梳理 需要缓存模块&…...
加密软件的发展:从古典密码到量子安全
在数字化时代,信息安全已成为个人隐私、商业机密乃至国家安全的重要基石。加密软件作为保护信息安全的核心工具,经历了从简单替换到复杂算法的漫长演变过程。本文将系统梳理加密软件的发展历程,分析当前主流技术,并展望未来趋势。…...
用Zotero + Word 宏,一键插入带超链接的参考文献!
第一步:准备好Zotero Word 确认你已经完成以下准备: ✅ 已安装好 Zotero ✅ 已安装好 Zotero Word 插件(一般自动装好了) ✅ Word 可以正常插入参考文献 ✅ 已插入好一组参考文献(可以先插几个测试) …...
Java SpringBoot的自定义配置
一,一个类多个属性的情况 application.properties配置文件写法 my.config.ip127.0.0.1 my.config.port8080自定义配置类:MyTestConfig import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.context.properties…...
Spring Boot 动态热更新 HTTPS 证书的实现与原理
在实际生产环境中,HTTPS 证书定期更新是非常常见的需求。传统方式通常要求重启服务来加载新证书,但在一些高可用系统中,重启服务会造成连接中断和短暂不可用。本篇文章将介绍如何在 Spring Boot 项目中,实现 不重启服务的情况下热…...
天工股份业绩大起大落:2024营收双位数下滑,稳定性或存疑
《港湾商业观察》施子夫 近期,江苏天工科技股份有限公司(以下简称,“天工股份”)拟公开发行股票并在北京证券交易所上市获得中国证监会同意注册,完成上市审核阶段中最后也是最关键的一步。 值得一提的是,…...
深入浅出 NVIDIA CUDA 架构与并行计算技术
🐇明明跟你说过:个人主页 🏅个人专栏:《深度探秘:AI界的007》 🏅 🔖行路有良友,便是天堂🔖 目录 一、引言 1、CUDA为何重要:并行计算的时代 2、NVIDIA在…...
网安融合:打造网络+安全一体化的超预期体验
近日,2025锐捷网络EBG(中国)核心伙伴大会在苏州圆满落幕。来自全国2000合作伙伴齐聚苏州,共同见证这场盛会的举办。会上,锐捷网络发布了七大战略产品解决方案。其中网络安全产品事业部产品市场总监沈世海发布了“打造网络安全一体化的超预期体验”的主题报告。报告围绕让“让渠…...
通义灵码 Rules 库合集来了,覆盖Java、TypeScript、Python、Go、JavaScript 等
通义灵码新上的外挂 Project Rules 获得了开发者的一致好评:最小成本适配我的开发风格、相当把团队经验沉淀下来,是个很好功能…… 那么有哪些现成的 Rules 可以抄作业呢,今天我们官方输出了 Java、TypeScript、Python、Go、JavaScript 等语…...
3D人脸扫描技术如何让真人“进入“虚拟,虚拟数字人反向“激活“现实?
随着虚拟人技术的飞速发展,超写实数字人已经成为数字娱乐、广告营销和虚拟互动领域的核心趋势。无论是企业家、知名主持人还是明星,数字分身正在以高度还原的形象替代真人参与各类活动,甚至成为品牌代言、直播互动的新宠。 3D人脸扫描&#…...
12孔AG调陶笛音域全解析:从E4到C6的演奏艺术
一、音域范围的精准界定 12孔AG调陶笛的音域范围为E4(低音Mi)至C6(高音Do),横跨13个自然音级(即E4-F4-G4-A4-B4-C5-D5-E5-F5-G5-A5-B5-C6)。若以半音计算,实际覆盖15个半音…...
IDEA编译错误Refer to the generated Javadoc files in xxx apidocs dir
文章目录 一、IDEA编译报错 Refer to the generated Javadoc1.1、报错内容1.2、解决办法 一、IDEA编译报错 Refer to the generated Javadoc 1.1、报错内容 Command line was: /opt/jdk1.8.0_181/jre/../bin/javadoc options packagesRefer to the generated Javadoc files i…...
高效培训,借助课程编辑器塑造卓越团队
(一)打造沉浸式培训体验 在企业人才培养体系里,培训是提升员工能力素质的重要手段,课程编辑器中的 VR 技术为企业培训带来新体验。以机械制造企业为例,以往员工培训靠书面资料、平面图片或简单视频讲解复杂机械设备结…...
Pikachu靶场-CSRF
CSRF (跨站请求伪造) 详细介绍与技术分析 一、什么是 CSRF? CSRF(Cross-Site Request Forgery,跨站请求伪造),是一种利用已认证用户的身份,诱使该用户执行恶意操作的攻击手段。攻击者通过伪造一个用户请求,…...
Flask(3): 在Linux系统上部署项目
1 前言 说实话,我并不想接触linux系统,要记住太多的命令。我更习惯windows系统,鼠标点点,只要记住少量的命令就可以了。 但是我选择了python,就注定无法逃避linux系统。虽然python也能在windows上很好的运行࿰…...
React JSX 语法深度解析与最佳实践
本文系统梳理 JSX 语法的完整知识体系。通过原理剖析、代码示例和开发警示,帮助开发者建立严谨的 JSX 使用认知。 一、JSX 本质解析 1.1 编译机制 JSX 通过 Babel 转换为 React.createElement 调用,以下为转换对照: // 原始 JSX <MyCo…...
岚图L3智能架构发布,9大首发新技术引领电动车变革
4月16日,岚图汽车在北京举办了L3级智能架构技术发布会,发布岚图天元智架。 据「TMT星球」了解,天元智架首发青云L3级智能安全行驶平台与鲲鹏L3级智能安全驾驶系统两大核心智能化技术集群,融合多项先进技术与黑科技,推…...
Nginx | Apache 配置 WebSocket 多层代理基本知识(附疑难杂症)
目录 前言1. 问题所示2. 基本知识3. 原理分析3.1 返回2003.2 返回4003.3 返回5004. 彩蛋前言 🤟 找工作,来万码优才:👉 #小程序://万码优才/r6rqmzDaXpYkJZF 爬虫神器,无代码爬取,就来:bright.cn 1. 问题所示 本地测试可以,上了域名的测试就不行了! WebSocket con…...
山东大学软件学院创新项目实训开发日志(18)之对话自动生成标题设为用户第一次对话发的文字
本次功能的实现主要集中在后端,前端代码不用改变: 前端界面效果展示:...
【web考试系统的设计】
文章目录 一、实验背景与目的二、实验设计与实现思路1. 功能架构2. 核心代码实现 总结 一、实验背景与目的 本次实验旨在深入理解Request、response对象的作用,Request对象的作用是与客户端交互,收集客户端的Form、Cookies、超链接,或者收集…...
【MySQL】库的操作
🏠个人主页:Yui_ 🍑操作环境:Centos7 🚀所属专栏:MySQL 文章目录 1. 创建一个数据库1.1 创建一个数据库(演示 2. 字符集和校验规则2.1 字符集2.2 校验规则2.3 知识补充:)…...
Face Swap 1.3.8| 解锁专业版,无限制换脸,视频换脸,释放您的创造力
Face Swap Pro - AI Photo Editor 「换脸 - AI 照片编辑器」释放您的创造力!通过换脸 - AI 照片编辑器,将您的想象变为现实,这是在照片和视频中交换人脸的终极应用程序。无论您是想探索不同的造型,穿越到另一个时代,还…...
AUTOSAR图解==>AUTOSAR_SWS_DefaultErrorTracer
AUTOSAR 默认错误追踪器(Default Error Tracer)详细分析 基于AUTOSAR 4.4.0规范的深入解析 目录 概述 DET模块的作用DET模块的定位 架构设计 模块架构接口设计 状态与行为 状态转换错误报告流程 API与数据结构 API概览数据类型定义 配置与扩展 模块配置回调机制 总结 1. 概述 …...
【hadoop】master一键启动hadoop集群(高可用)
之前写了一篇【hadoop】master一键启动zkServer-CSDN博客 现在是最好的安排: 1. cd ~ vim hadoop-all.sh #!/bin/bash# 检查参数是否为 start 或 stop if [ "$1" "start" ]; then# 启动服务sh ~/zk-all.sh startstart-dfs.shstart-yarn.s…...
细说STM32单片机FreeRTOS任务管理API函数及多任务编程的实现方法
目录 一、FreeRTOS任务管理API函数 1、任务管理API函数 2、获取任务的句柄 (1)函数xTaskGetCurrentTaskHandle() (2)函数xTaskGetIdleTaskHandle() (3)函数xTaskGetHandle() 3、单个任务的操作 &a…...
从0开始掌握动态规划
动态规划的核心思想 -- 以空间换时间 复杂点说通过分解问题为子问题并存储子问题解来优化复杂计算的算法策略。 简单看个问题。 一,初始:求最长连续递增子序列 nums [10,9,2,5,3,7,101,18] 求上面数组中的最长连续递增子序列,输出其长度 …...
解锁向量数据库:实现高效过滤与管理的实用方法
1. 带过滤的相似性搜索 大多数向量数据库不仅可以存储向量数据,还支持存储相关元数据。这些元数据可以包括文本原文、扩展信息、页码、文档 ID、作者、创建时间等自定义信息,通常用于实现数据检索。 向量数据库记录 向量(vector)元数据(metadata)id遗…...