PSI算法极简概述

news2024/11/23 6:48:45

什么是隐私求交PSI

隐私求交是多方安全计算中的密码学技术,它允许数据持有方通过比较加密集合计算得到交集,且任何一方都不会获得其他信息。PSI还存在一种变体,即CS场景。客户端可以获取其与服务器的交集但是服务器无法学习到该集合。如果在一个小的可以预测的域上通过密码哈希比较数据集合,应该采取预防措施来防止字典攻击。

PSI在日常生活中也有许多应用案例。Apple 在密码监控中使用了这种技术。 它已提议将该技术用于其宣布的扩大对儿童的保护。

PSI协议分类

根据数据的托管方式,PSI 协议可分为两大类:传统 PSI 和 委托 PSI。

  1. 在传统的 PSI 类别中,数据所有者直接相互交互,并且在计算时需要拥有其集合的副本,参考论文《Efficient Private Matching and Set Intersection》。
  2. 在委托 PSI 中,PSI 的计算和/或集合的存储可以委托给第三方服务器(它本身可能是被动或主动的对手)。 委托 PSI 类别可以进一步分为两类:(a) 支持一次性委托的类别,以及 (b) 支持重复委托的类别。 支持一次性委托的 PSI 协议要求数据所有者重新编码其数据并将编码后的数据发送到服务器以进行每次计算。 那些支持重复委托的允许数据所有者只将他们的(加密的)数据上传到服务器一次,然后在服务器之外的每次计算中多次重复使用它。

最近,研究人员提出了一种支持数据更新的 PSI 协议变体(包括传统类别和委托类别。 这种类型的 PSI 协议允许数据所有者以低开销和保护隐私的方式将集合元素插入/删除其数据。参考论文《Updatable Private Set Intersection》、《Multi-party Updatable Delegated Private Set Intersection》。

PSI算法的分类

PSI算法大致可用分为以下4类。

  1. 基于哈希函数的PSI算法:这类算法使用哈希函数对数据集中的元素进行哈希,并将哈希值发送给其他参与方进行比对。其中一种常见的算法是Bloom Filter,它使用多个哈希函数将元素映射到一个位向量中。该类型的方法是一种不安全的交集协议,当双方输入域很小的时候,存在字典攻击的风险。

  2. 基于不经意传输(OT)的 PSI算法:这类算法利用零知识证明或者类似的技术,使得参与方可以获取另一方拥有的特定元素,而不了解其他元素的信息。这种算法的代表性方法是Oblivious Polynomial Evaluation(OPE)算法。在安全的PSI算法中,基于OT的PSI算法是最快速的。

  3. 基于GC PSI算法:该算法采用Garbled Circuit(GC)协议作为核心方法,并结合了OT协议来实现PSI。此类协议的每一个交集内元素会带有一个“负载”(payload),可以用来计算交集的一些函数。然而,基于GC方案的性能与其他类型的方案相比仍有较大差距,随着数据规模的增加,电路深度不断增加,导致电路规模快速膨胀,通信、计算、内存开销都随之膨胀。基于GC的PSI方案虽然不如基于OT的PSI算法快速高效,但是其更灵活,并且可以轻松适应计算集合交集功能的变体。

  4. 基于同态加密的PSI算法:同态加密是一种加密技术,允许在密文状态下进行计算,而无需解密。这类算法使用同态加密技术对数据进行加密,并在加密状态下执行集合交集运算。代表性的算法包括基于Paillier、BGV、BFV同态加密的PSI算法。基于同态加密的PSI方案虽然不如基于OT的PSI算法快速高效,但是其更安全。

  5. 基于差分隐私的PSI算法:为了防止PSI结果的隐私泄露,提出了交集满足差分隐私的方法,即在PSI结果中添加一定要求的噪声,从而保证敌手无法通过交集结果推测数据集合。交集满足差分隐私广泛应用于数据分析场景,比如社交网络分析、医疗研究、用户行为分析等。基于差分隐私的PSI方案在前述的PSI算法中提供了对结果的安全保护,具有更严格的隐私保护。可以通过需求调整噪声参数平衡隐私保护和数据准确性要求。

基于哈希函数的PSI算法

基于哈希函数的PSI(Private Set Intersection)算法主要包括以下几种常见算法:

  1. Bloom Filter:Bloom Filter是一种经典的基于哈希函数的PSI算法。它使用多个哈希函数对数据集中的元素进行哈希,并将哈希值映射到一个位向量中。通过比对位向量,可以确定两个数据集之间的交集元素。参考文献《Private set intersection with Bloom filters》进行详细了解。

  2. Count-Min Sketch:Count-Min Sketch是一种概率型数据结构,常用于基于哈希函数的PSI算法。它利用多个哈希函数将元素映射到一个二维计数表中,通过对计数进行累加,可以估计元素的出现频率。在PSI中,Count-Min Sketch可以用于判断两个数据集是否存在交集。参考文献《 An improved data stream summary: the CountMin sketch and its applications》。

  3. Cuckoo Filter:Cuckoo Filter是一种近似集合成员检测的数据结构,也可以应用于基于哈希函数的PSI算法。它使用两个哈希函数将元素映射到一个哈希表中,通过检查哈希表中的位来判断元素是否存在。参考文献《Efficient Circuit-based PSI via Cuckoo Hashing》。

  4. MinHash:MinHash是一种用于近似计算集合相似度的算法,也可以用于PSI。它通过将元素进行哈希,选择哈希值中的最小值,将最小值组成一个签名,通过比对签名来判断集合之间的交集。参考文献《EsPRESSo: Efficient Privacy-Preserving Evaluation of Sample Set Similarity∗》。

基于哈希的PSI算法,由于需要随时随机访问操作,所以需要将过滤器全部存储在内存中,所以会占用一定的内存空间。基于布谷鸟哈希的PSI算法空间占用优于基于布隆过滤的PSI算法方案。

基于不经意传输(OT)的 PSI算法

基于OT的PSI算法流程如下:
假设有两个集合 A A A B B B,其中 A A A包含元素 a 1 , a 2 , . . . , a n a_1,a_2,...,a_n a1a2...an B B B包含元素 b 1 , b 2 , . . . , b m b_1,b_2,...,b_m b1b2...bm。使用OT方式计算PSI,相当于求解 m m m ( N 1 ) O T \binom{N}{1} OT (1N)OT 问题,其中 B B B 中的元素 b i b_i bi 就是每次的选择队列。

基于OT的PSI算法可以分为以下几类:

  1. 基于伪随机函数(Pseudo Random Function, PRF)的OT PSI算法:该算法使用PRF来生成OT所需的参数,然后利用这些参数执行OT协议来实现PSI,该算法为KKRT PSI 算法。参考文献《Efficient batched oblivious PRF with applications to private set intersection》。

  2. 基于哈希技术的OT PSI算法:该算法利用哈希函数来生成OT所需的参数,并使用它们执行OT协议,该算法可以降低通信次数到 O ( n l o g n ) O(nlogn) O(nlogn)。参考文献《Phasing: Private Set Intersection using Permutation-based Hashing》。

  3. 基于承诺方案(Commitment Scheme)的OT PSI算法:该算法使用承诺方案来实现随机选择,然后利用这些随机数执行OT协议来实现PSI。参考文献《Malicious-Secure Private Set Intersection via Dual Execution》(该算法目前是恶意敌手模型下最快的PSI算法)、《Actively Secure 1-out-of-N OT Extension with Application to Private Set Intersection》

  4. 基于Bloom Filter的PSI算法:Bloom Filter是一种可以高效地判断某个元素是否在集合中的数据结构。这类算法使用Bloom Filter存储集合元素的哈希值,从而减少通信和计算成本。该想法首先通过《Fast private set operations with sepia》提出。在《Outsourced private set intersection using homomorphic encryption》中又将Bloom Filter与同态加密方法进行结合。为了解决论文上述两篇文章中的安全和效率问题,《When Private Set Intersection Meets Big Data: An Efficient and Scalable Protocol》提出一种Oblivious Bloom Filter算法,在该算法中,客户端使用Bloom Filter(BF)对其私有集进行编码,服务端使用GBF(Garbled Bloom Filter)对其私有集合进行编码,再通过OT协议进行求交运算。该算法有标准和增强版本,可以从半诚实敌手模型扩展到敌手模型。该算法拥有较好的效率,计算 200 万个元素集的交集,在并行模式下的中等硬件上仅需要 41 秒(80 位安全性)和 339 秒(256 位安全性)。在《Quantum private set intersection cardinality based on bloom filter》中还提出了抗量子攻击的基于Bloom Filter的PSI算法。

《When Private Set Intersection Meets Big Data: An Efficient and Scalable Protocol》的硬件配置:服务器是 Mac Pro,配备 2 个 Intel E5645 6 核 2.4GHz CPU、32 GB RAM,运行 Mac OS X 10.8。 客户端是一台 Macbook Pro 笔记本电脑,配备 Intel 2720QM 四核 2.2 GHz CPU、16 GB RAM,运行 Mac OS X 10.7。 两台电脑通过1000M以太网连接。

基于GC的PSI算法

基于GC的PSI算法最早在2012年《Private set intersection_Are garbled circuits better than custom protocols?》中提出。该方案基于半诚实敌手模型,文中提出的基于GC的PSI算法主要思想是各方在本地对他们的集合进行排序,私下将他们的排序集合并到一个排序列表中。 然后不经意地比较每个相邻的元素对,如果该对中的元素相等,则保留该值,否则用虚拟值替换。 最后,在显示整个列表之前,所得到的匹配元素列表会被明显地打乱。 这个混洗步骤是必要的,因为否则有关匹配元素的位置信息会泄漏有关各方集合中不匹配元素的信息。该过程中,GC过程可以看作是一个黑盒。

基于GC的PSI算法由于比较和混洗步骤不同,其对应的复杂度也不相同。

  • 比较算法Bitwise-AND(BWA),只适用于小数量级。
  • 比较算法Pairwise-Compare (PWC) protocol,最坏的情况下复杂度是 Θ ( n 2 ) Θ(n^2) Θ(n2),其中 n n n 是输入数据集大小。
  • 不经意洗牌算法Sort-Compare-Shuffle, 在小数量级的情况下是 Θ ( n log ⁡ n ) Θ(n\log n) Θ(nlogn)。该算法的主要思想是各方在本地对他们的集合进行排序,然后(私下)将他们的排序集合并到一个排序列表中。
ProtocolNumber of Non-Free Gates
BWA 2 σ 2^σ 2σ
PWC ( ( 2 n − n ^ ) 2 + n ^ ) ( σ − 1 ) / 4 ((2n-\hat{n})^2+\hat{n})(σ-1)/4 ((2nn^)2+n^)(σ1)/4
Sort-Compare-Shuffle-SORT 2 σ n l o g ( 2 n ) + ( ( 3 n − 1 ) σ − n ) + 2 σ n l o g 2 ( 2 n ^ ) 2\sigma nlog(2n)+((3n−1)\sigma −n) + 2\sigma nlog^2(2\hat{n}) 2σnlog(2n)+((3n1)σn)+2σnlog2(2n^)
Sort-Compare-Shuffle-HE 2 σ n l o g ( 2 n ) + ( ( 3 n − 1 ) σ − n ) + ( σ + 32 ) n 2\sigma nlog(2n)+((3n−1)\sigma −n) + (\sigma +32)n 2σnlog(2n)+((3n1)σn)+(σ+32)n
Sort-Compare-Shuffle-SORT 2 σ n l o g ( 2 n ) + ( ( 3 n − 1 ) σ − n ) + σ ( n log ⁡ n − n + 1 ) 3 2\sigma nlog(2n)+((3n−1)\sigma −n) + \frac{\sigma (n\log n-n+1)}{3} 2σnlog(2n)+((3n1)σn)+3σ(nlognn+1)

在GC中,计算过程需要转换为一系列的门,而门可以是 Free Gates 和 Non-Free Gates。Free Gates 表示计算结果直接从密文获得,不需要解密密钥,所以计算成本极低。而Non-Free Gates 表示具有更高的计算成本,Non-Free Gates越多,计算成本越高,所需计算量更大,所以Non-Free Gates的数量代表了GC的计算效率和速度。所以在GC中通过控制Non-Free Gates的数量可以优化GC的效率和速度。

为了解决基于GC的PSI算法中通信开销、计算和内存开销都较大的问题,有如下的改进方案提出:

  1. 基于哈希的改进算法:这类算法采用哈希函数将集合中的元素映射到一个固定长度的哈希值,并在比较时只比较哈希值,从而减少通信和计算成本。比如2015年的《Phasing: Private Set Intersection using Permutation-based Hashing》一文中通过应用Phasing(使用基于排列的散列来减少表示的位长度) 改进上述不经意洗牌过程,减低了Non-Free Gates的数量和电路门的深度,从而使得效率比Sort-Compare-Shuffle算法快5倍以上。2018年的《Efficient Circuit-Based PSI via Cuckoo Hashing》优化 Cuckoo 哈希算法,将参与方扩展到多方。

  2. 基于OT的改进算法:2019年Benny Pinkas等人通过《Efficient Circuit-based PSI with Linear Communication》一文提出了线性复杂度的基于GC的PSI算法。该算法基于用于计算不经意的可编程伪随机函数 (OPPRF) 的协议的使用,将多次调用 OPPRF 的成本分摊到一起,从而使得通信成本是线性的。

基于同态加密的PSI算法

  • 首先将同态加密用于PSI的是在2004年《Efficient Private Matching and Set Intersection》中。该文提出了基于同态加密技术和平衡散列()的PSI协议,可以对抗两方的恶意敌手模型。在半诚实敌手模型下,该算法中,双方首先通过多项式对数据集合中每项展开得到加密值 P ( y ) P(y) P(y),然后生成随机扰动 r r r,最后通过同态加得到每项的加密值 E n c ( r ⋅ P ( r ) + y ) Enc(r\cdot P(r)+y) Enc(rP(r)+y)。在恶意安全模型下,客户端和服务端都增加一个 k c k_c kc k s k_s ks根校验,从而对抗恶意的客户端或服务端。

  • 2010年《Efficient Set Operations in the Presence of Malicious Adversaries》提出了一种基于同态加密和零知识证明的方案,可以保证在恶意攻击者存在的情况下仍然能够保护集合的隐私并实现高效的集合操作。

  • 《Fast Private Set Intersection from Homomorphic Encryption》(2017年)中提出了一种基于同态加密的高效私有集合交集算法,该算法使用 Paillier 同态加密算法对集合元素进行加密,并利用同态加法和同态乘法实现集合交集计算。该算法通过将批处理与布谷鸟散列和基于排列的散列结合使用优化同态加密算法,同时通过加窗和分区技术将同态加密的电路深度从原来的 O ( l o g N x ) O(log N_x) O(logNx)降低到:

    其中$N_x$ 是 $X$ 数据集大小,$B$是数据集切分之后的大小,$\alpha$ 是电路切分后子集大小。
  • 《Outsourced Private Set Intersection Using Homomorphic Encryption》(2017年)通过同态加密技术将集合交集计算任务安全地外包给第三方计算服务商,该算法具有较低的计算和通信开销,但是需要信任第三方计算服务商,并且在实现中需要解决数据隐私保护和安全性等问题。

  • 《Private set intersection with linear communication from general assumptions》(2019年)提出了一种基于广义假设的线性通信私有集合交集算法,使用同态加密实现加密和计算,并通过引入新的技术,将通信复杂度降低到线性级别。

  • 《Labeled PSI from Fully Homomorphic Encryption with Malicious Security》(2018)和《Labeled PSI from Homomorphic Encryption with Reduced Computation and Communication》(2021)分别实现了基于层次全同态的PSI算法。二者底层采用标记PSI(LPSI)技术,该技术为每个数据项增加标记,然后使用HE技术等进行加密。LPSI技术可以应用于有针对性的价格歧视、移动通信中的密钥检索等。二者都使用层次同态(leveled FHE)BFV或BGV算法(SEAL库),文章2通过改进SIMD打包技术,使用Paterson-Stockmeyer 算法降低计算复杂度,修改窗口技术降低通信成本,从而提高计算效率。

基于差分隐私的PSI算法

差分隐私最早是微软研究院Cynthia Dwork在2006年《Differential Privacy》中提出,该论文提出差分隐私算法的目的是为了防止恶意敌手从直方图、K-匿名化结果等中预测出其他隐私数据信息,从而造成数据库的隐私泄露。

2012年,《DJoin: Differentially Private Join Queries over Distributed Databases》首次将差分隐私应用用于PSI中,该论文提出的DJoin 可以支持许多 SQL 风格的查询,包括由不同实体维护的数据库的联接,只需要将原SQL转换为其对应的原语表达即可:BN-PSI-CA(私有集交集基数的差分私有形式)和 DCR(多方组合运算符,可以聚合噪声基数而不复合各个噪声项。2019年《Cheaper Private Set Intersection via Differentially Private Leakage》提出了一种用于恶意安全 2PC 中差分隐私泄露的安全模型,同时还引入了两种新的改进机制,用于“差分隐私直方图高估”,这是差分隐私 PSI 的主要技术挑战。2020年《Differentially Private Two-Party Set Operations》将差分隐私、同态加密和电路进行结合,使得通信复杂度能达到 O ( m ) O(m) O(m),其中 m m m是数据集最小的规模。2023年《Split, Count, and Share: A Differentially Private Set Intersection Cardinality Estimation Protocol》介绍了如何通过差分隐私PSI进行交集基数的估计,通过其测试结果,该算法可以较好地替代传统交集基数(PSI-CA)协议。

私有交集基数(PSI-CA)协议是计算两个隐私集合中同时存在的隐私元素数量,即这两个隐私集合的交集的大小。

总结

在所有的PSI算法中基于哈希和基于OT的PSI算法最快,通信最少。但是基于哈希的PSI算法是不安全算法,所以基于半诚实敌手模型和恶意敌手模型下最快的是OT-based PSI算法。在实际应用中,可以考虑基于哈希和OT的PSI算法。而对安全性较高的应用场景,推荐使用基于GC、同态和差分的PSI算法。同时,在考虑选择PSI的时候,需要考虑双方数据集大小是否一直,上述许多论文中的算法是在假设双方数据集一致的情况下(平衡PSI)。而非平衡PSI场景下,通信量和计算量一般是受数据集较大一方决定的。

目前PSI在社交网络中的关系路径发现、 僵尸网络检测、全测序人类基因组测试、接近度测试、在线作弊者检测游戏、情报收集等方面都有显著应用。

参考文献

  • Wiki PSI介绍:Private set intersection
  • 多方安全计算热点:隐私保护集合求交技术 (PSI) 分析研究报告
  • 上述论文

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

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

相关文章

【Linux】gcc 的使用 | 动静态库 | make Makefile

程序翻译的过程 程序翻译的过程就是将C语言转换成二进制指令的过程。 预编译(完成 去注释、宏替换、头文件展开、条件编译等工作):gcc -E test.c -o test.i 编译(将C文本替换成汇编语言):gcc -S test.i -…

Excel实用技巧 如何将EXCEL中在同个单元格中的汉字和数字分开

右边字符串,左边数字 RIGHT(A1,LENB(A1)-LEN(A1)) LEFT(A1,2*LEN(A1)-LENB(A1)) 左边字符串,右边数字 LEFT(A1,LENB(A1)-LEN(A1)) RIGHT(A1,2*LEN(A1)-LENB(A1))

在Ubuntu环境下安装anaconda(很简单!!!!!)

前言:想要使用tensorflow-compression,但是这个在windows下不支持。那我只好去Ubuntu环境下的安装anaconda。但是!!!!!找了半天,都没找到好的安装教程,浪费了一下午,心态…

每天一点Python——day49

#第四十九天 # #元组的创建方式: #如图: #①直接小括号 a(python,world,98) print(a) print(type(a)) #也可以省略不写 a1python,world,98 print(a1) print(type(a1)) #为什么可以省略省略小括号呢 a3(python) print(type(a3)) #会发现是字符串类型 #因为…

Python 批量修改或替换文本内容

Python 批量修改或替换文本内容 前言源码效果图鸣谢 前言 遇到一个需要将一堆代码中部分文字替换或删除的需求。 需要处理像下面上百个脚本 需要删除每个脚本中类似下图的内容 可以用python批量处理所有的代码,并且删除我想要删除的内容。 源码 其中使用charde…

C#(四十九)之关于string的一些函数

1&#xff1a;startswith 字符串以。。。开头 // startswith 字符串以。。。开头string[] strArr { "asd","azx","qwe","aser","asdfgh"};for (int i 0; i < strArr.Length; i){if(strArr[i].StartsWith("as&qu…

Unity 新输入系统InputAction设置按键的阈值

输入阈值问题 在新的输入系统中&#xff0c;如果添加一个手柄按键只需要添加Pressed就够了&#xff0c;监听他的三个动作就可以得到按下&#xff0c;点击&#xff0c;抬起。 例如下面的代码&#xff1a; inputAction.Player.Trigger_Right.started OnRightTriggerStarted;i…

2023年07月数据库流行度最新排名

点击查看最新数据库流行度最新排名&#xff08;每月更新&#xff09; 2023年07月数据库流行度最新排名 TOP DB顶级数据库索引是通过分析在谷歌上搜索数据库名称的频率来创建的 一个数据库被搜索的次数越多&#xff0c;这个数据库就被认为越受欢迎。这是一个领先指标。原始数…

国产开源流批统一的数据同步工具Chunjun入门实战

文章目录 概述定义特性 部署安装版本对应关系通用配置详解整体配置Content 配置Setting 配置 Local提交Standalone提交Json方式使用SQL方式使用MySQL SinkKafka Sink 概述 定义 Chunjun 官网 https://dtstack.github.io/chunjun-web/ 源码release最新版本1.12.8 Chunjun 文档地…

代码源 扫描线权值线段树 板子

矩形面积并&#xff08;存档&#xff09; 矩形面积并 - 题目 - Daimayuan Online Judge 题意&#xff1a; Code&#xff08;存档&#xff0c;还没写完&#xff09;&#xff1a; #include <bits/stdc.h>#define y1 Y1 #define int long longusing namespace std;const…

k8s的资源配置清单的管理操作

目录 一、资源配置清单1.1 初步认识资源清单中svc的重要配置项1.2 手动编写 svc资源配置1.3 手动生成模板&#xff0c;再编写资源清单1.4 写yaml太累怎么办&#xff1f;1.5 官网下载资源模板 一、资源配置清单 Kubernetes 支持 YAML 和 JSON 格式管理资源对象 JSON 格式&#…

HOT45-二叉树的右视图

leetcode原题链接&#xff1a;二叉树的右视图 题目描述 给定一个二叉树的 根节点 root&#xff0c;想象自己站在它的右侧&#xff0c;按照从顶部到底部的顺序&#xff0c;返回从右侧所能看到的节点值。 示例 1: 输入: [1,2,3,null,5,null,4] 输出: [1,3,4]示例 2: 输入: [1,n…

django celery简单 例子

django celery简单 例子 https://docs.celeryq.dev/en/latest/django/first-steps-with-django.html pip list pip install Django4.2.3 pip install redis4.6.0 pip install celery5.3.1 pip install SQLAlchemy2.0.17 source demo1_venv/bin/activate django-admin start…

激光雷达在ADAS测试中的应用与方案

在科技高速发展的今天&#xff0c;汽车智能化已是必然的趋势&#xff0c;且自动驾驶汽车的研究也在世界范围内进行得如火如荼。而在ADAS测试与开发中&#xff0c;激光雷达以其高性能和高精度占据着非常重要的地位&#xff0c;它是ADAS测试与开发中不可缺少的组成。 一 激光雷达…

sendRedirect进行页面重定向无反应

问题 sendRedirect进行页面重定向无反应 详细问题 笔者使用ServletJSP作为技术框架&#xff0c;使用AJAX进行数据请求&#xff0c;后程序运行完成 response.sendRedirect("请求链接");并没有按照笔者预期&#xff0c;进行页面重定向 请求端核心代码 $.ajax({url…

nginx报403 Forbidden错误

nginx是以root启动的&#xff0c;将 "user nobody" 改为 "user root" 刷新一下配置&#xff1a; /usr/local/nginx/sbin/nginx -t /usr/local/nginx/sbin/nginx -s reload

PCL点云处理之细小空洞填补 (一百九十八)

PCL点云处理之细小空洞填补 (一百九十八) 一、算法介绍二、具体实现1.代码2.结果一、算法介绍 点云扫描过程中,由于遮挡或其他原因,可能存在一些细小空洞,有可能造成数据处理上一些问题,这里介绍一种填补细小空洞的方法。具体方法和效果如下所示 二、具体实现 1.代码…

SpringBoot3【⑤ 核心原理】

1. 事件和监听器 1. 生命周期监听 场景&#xff1a;监听应用的生命周期 1. 监听器-SpringApplicationRunListener 自定义SpringApplicationRunListener来监听事件&#xff1b; 1.1. 编写SpringApplicationRunListener 这个接口的实现类 1.2. 在 META-INF/spring.factories …

前端Vue组件Mixin技术

前端vue组件开发的一大优势在于可以提高代码的复用性。极大的提升开发效率&#xff0c;通过Mixin技术&#xff0c;我们可以实现类似继承的效果&#xff0c;组件的复用性可以得到加强。 当我们开发前端项目时&#xff0c;可能会定义非常多的组件&#xff0c;这些组件中可能有部…

SpringBoot3【⑥ 场景整合:①NoSQL:Redis】

0. Docker安装 输入如下参数 sudo yum install -y yum-utilssudo yum-config-manager \--add-repo \https://download.docker.com/linux/centos/docker-ce.reposudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-pluginsudo syst…