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

纠删码参数自适应匹配问题ECP-AMP实验方案(中)

6.方法设计

6.1.数据获取

为了收集不同的文件大小和纠删码参数对性能指标的影响,本文在Hadoop平台上进行了模拟实验。Hadoop是一种开源的分布式存储和计算框架,它可以支持不同类型的纠删码,并提供了一些应用程序接口和工具来测试和评估纠删码的性能 。

本文选取了以下六个性能指标作为评价纠删码参数选择的依据:

  1. 数据冗余度(DR):表示存储一个文件所需的编码块总数与数据块总数的比值,反映了存储空间的利用率。数据冗余度越小,表示存储空间利用率越高。在具有k个数据块和m个奇偶校验块的存储系统中,冗余度定义为 DR=m/(k+m)。

  2. 存储成本(SC):表示存储一个文件所需的编码块总数与单位编码块价格的乘积,反映了存储费用的开销。存储成本越小,表示存储费用开销越低。在具有k个数据块和m个奇偶校验块的存储系统中,存储成本定义为 SC=(k+m)/m。

  3. 传输开销(TO):传输开销是指纠删码在读写和恢复过程中消耗的网络带宽资源,它反映了纠删码对网络负载的影响。一般来说,传输开销越低,表示网络负载越低。传输成本TO定义为恢复工作负载传输的数据块数。

  4. 计算开销(CO):计算开销是指纠删码在编码和解码过程中消耗的计算资源,它反映了纠删码对系统性能的影响。计算成本定义为GF乘法/异或算法操作数。

  5. 可靠性(RE):表示在任意m个编码块丢失或损坏的情况下,仍然可以恢复原始文件的概率,反映了数据完整性的保障。可靠性越大,表示数据完整性保障越高。
    R E = ∑ i = 0 m C k + m i p i ( 1 − p ) ( k + m − i ) RE=\sum_{i=0}^{m}C_{k+m}^ip^i(1-p)^{(k+m-i)} RE=i=0mCk+mipi(1p)(k+mi)

  6. 恢复时间(RT):表示从任意k个编码块中恢复原始文件所需的时间,反映了数据恢复速度的效率。恢复性能越大,表示数据恢复速度越快。恢复性能 RP 是通过对恢复工作负载进行解码的平均开销(包括计算和访问成本)来衡量的 。

本文选取了以下四个变量作为影响纠删码参数选择的因素:

  1. 数据大小(filesize):表示一个文件占用的字节数,反映了文件内容的规模。文件大小范围为0MB-1GB,每隔10MB取一个值,共有101个值。
  2. 数据块个数(k):表示一个文件被分割成的数据块的个数,反映了文件分割的粒度。数据块个数范围为2-16,每隔1取一个值,共有15个值。
  3. 冗余块个数(m):表示一个文件生成的冗余块的个数,反映了文件编码的冗余度。冗余块个数范围为1-16,每隔1取一个值,共有16个值。
  4. 故障编码块个数(m’):表示一个文件在传输或存储过程中丢失或损坏的编码块的个数,反映了文件遭受的故障程度。故障编码块个数范围为0-m,每隔1取一个值,共有M+1个值。

本文使用了Reed-Solomon纠删码,这是一种现代的软件系统中随处可见的纠删码技术。

为了模拟不同文件大小和不同纠删码参数下的各项性能指标,我们使用了Hadoop软件作为实验平台。Hadoop是一种分布式计算框架,它可以将大量的数据存储在多个节点上,并通过MapReduce模型进行并行处理。Hadoop提供了一个分布式文件系统(HDFS),它可以支持纠删码技术的存储和访问。

我们搭建了一个由32个节点组成的Hadoop集群,每个节点都具有以下配置:

  • CPU:Intel Core i7-8700K @ 3.70GHz
  • 内存:16GB DDR4
  • 硬盘:1TB SATA
  • 网络:千兆以太网

我们在每个节点上安装了以下软件:

  • 操作系统:Ubuntu 18.04 LTS
  • Hadoop版本:3.2.2
  • PyCharm版本:17.0.8+7-b1000.8 amd64

我们使用了以下数据集作为实验对象:

  • 文件大小范围:0MB-1GB
  • 文件类型:文本
  • 文件数量:100个

我们将这些文件上传到HDFS中,并对每个文件应用不同的纠删码参数(k,m),其中k的范围为2-16,m的范围为1-16。我们使用了RS纠删码来生成和恢复冗余块。我们修改了Hadoop提供的内置纠删码配置来完成纠删码技术的编码和解码过程。

6.2.CRITIC确定权重

为了综合考虑各项性能指标,我们使用了critic客观权重法为这些指标赋权,计算出每种情况下的综合评分。

CRITIC(CRiteria Importance Through Intercriteria Correlation)方法,旨在确定多准则决策(MCDM,MutltipleCritier Decision Making) 问题中相对重要性的客观权重。它是基于评价指标的对比强度和指标之间的冲突性来综合衡量指标的客观权重。考虑指标变异性大小的同时兼顾指标之间的相关性,并非数字越大就说明越重要,完全利用数据自身的客观属性进行科学评价。

对比强度是指同一个指标各个评价方案之间取值差距的大小,以标准差的形式来表现。标准差越大,说明波动越大,即各方案之间的取值差距越大,权重会越高;

指标之间的冲突性,用相关系数进行表示,若两个指标之间具有较强的正相关,说明其冲突性越小,权重会越低。

对于 CRITIC 法而言,在标准差一定时,指标间冲突性越小,权重也越小;冲突性越大,权重也越大;另外,当两个指标间的正相关程度越大时,(相关系数越接近 1),冲突性越小,这表明这两个指标在评价方案的优劣上反映的信息有较大的相似性。

critic客观权重法的基本思想是:

  • 如果一个属性的取值变化越大,说明该属性越能反映决策对象的差异性,因此该属性的权重应该越大。
  • 如果一个属性与其他属性的相关性越高,说明该属性越能反映决策对象的整体性,因此该属性的权重应该越大。

6.2.1.归一化处理

步骤一:为了消除不同性能指标的量纲和取值范围的影响,本文对收集的数据进行了归一化处理,使其取值在[0,1]之间。对于正向指标(越大越好),使用以下公式:

对于正向指标:
x i j ′ = X i j − m i n ( X 1 j , X 2 j , . . . , X n j ) m a x ( X 1 j , X 2 j , . . . , X n j ) − m i n ( X 1 j , X 2 j , . . . , X n j ) x'_{ij}=\frac{X_{ij}-min(X_{1j},X_{2j} ,...,X_{nj})}{max(X_{1j},X_{2j},...,X_{nj})-min(X_{1j},X_{2j},...,X_{nj})} xij=max(X1j,X2j,...,Xnj)min(X1j,X2j,...,Xnj)Xijmin(X1j,X2j,...,Xnj)

对于负向指标:
x i j ′ = m a x ( X 1 j , X 2 j , . . . , X n j ) − X i j m a x ( X 1 j , X 2 j , . . . , X n j ) − m i n ( X 1 j , X 2 j , . . . , X n j ) x'_{ij}=\frac{max(X_{1j},X_{2j} ,...,X_{nj})-X_{ij}}{max(X_{1j},X_{2j},...,X_{nj})-min(X_{1j},X_{2j},...,X_{nj})} xij=max(X1j,X2j,...,Xnj)min(X1j,X2j,...,Xnj)max(X1j,X2j,...,Xnj)Xij

其中,x_ij是第i个文件在第j个指标上的原始值,x_ij是第i个文件在第j个指标上的标准化值。

6.2.2指标变异性

步骤二:对于每个指标,计算其差异系数,表示其差异程度。使用以下公式:

以标准差的形式来表现,Sj表示第j个指标的标准差:
{ x j ˉ = 1 n ∑ i = 1 n x i j S j = 1 n − 1 ∑ i = 1 n ( x i j − x ˉ j ) 2 \left\{\begin{matrix} \bar{x_j}=\frac{1}{n}\textstyle\sum_{i=1}^{n}x_{ij} \\ \\ \ S_j= \sqrt{\frac{1}{n-1}\sum_{i=1}^n (x_{ij}-\bar{x}_j)^2} \end{matrix}\right. xjˉ=n1i=1nxij Sj=n11i=1n(xijxˉj)2

在CRITIC法中使用指标差来表示各指标的内取值的差异波动情况,标准差越大表示该指标的数值差异越大,越能放映出更多的信息,该指标本身的评价强度也就越强,应该给该指标分配更多的权重。

6.2.3.指标冲突性

步骤三:对于每两个指标,计算其指标冲突性,表示指标间的相关性程度。使用以下公式:
R j = ∑ i = 1 p ( 1 − r i j ) R_j=\sum_{i=1}^{p}(1-r_{ij}) Rj=i=1p(1rij)

以相关系数的形式来表现,rij表示评价指标i和j之间的相关系数。

使用相关系数来表示指标间的相关性,与其他指标的相关性越强,则该指标就与其他指标的冲突性越小,反映出相同的信息越多,所能体现的评价内容就越有重复之处,一定程度上也就削弱了该指标的评价强度,应该减少对指标分配的权重。

6.2.4.信息量

步骤四:对于每个指标,计算其信息熵权重,表示其重要程度,使用如下公式:
C j = S j ∑ i = 1 p ( 1 − r i j ) = S j ∗ R j C_j=S_j\sum_{i=1}^{p}(1-r_{ij})=S_j*R_j Cj=Sji=1p(1rij)=SjRj

Cj越大,第j个评价指标在整个评价指标体系的作用越大,就应该给其分配更多的权重。

6.2.5.权重

步骤五:对于每个指标,计算其critic权重,表示其综合影响能力。使用以下公式:
W j = C j ∑ j = 1 p C j W_j=\frac{C_j}{\textstyle\sum_{j=1}^{p}C_j} Wj=j=1pCjCj

所以第j个指标的客观权重Wj

6.2.6.赋值

步骤六:对于每种情况,计算其综合评分,表示其总性能。使用以下公式:
s i = ∑ j = 1 m v j ∗ x i j s_i=\sum_{j=1}^{m}v_j*x_{ij} si=j=1mvjxij

si表示第i中情况的综合评分。

得到各个指标使用critic权重法的权重,每个指标会获得一个如下的权重值。

将通过CRITIC方法得到的权重与原指标数据相乘,然后各指标相加得到一个综合指标评分goal,将每组filesize的goal数据做比较,选出最大的goal,然后将所有的filesize都依次得到,形成一张filesize,k,m,goal表,即达成目标。

6.3.DBSCAN聚类算法

DBSCAN(Density-Based Spatial Clustering of Applications with Noise),DBSCAN聚类分析是一种基于密度的无监督学习算法,它可以在不需要指定簇的数量的情况下,根据数据点的密度将它们分成不同的簇,并且可以识别出噪声点和异常值。

6.3.1.DBSCAN聚类分析算法的计算公式:

给定一个数据集D={x1,x2,…,xn},其中xi是一个d维的向量,表示第i个数据点的特征。DBSCAN聚类分析需要两个参数:ϵ和MinPts,分别表示邻域的半径和最小密度点数。DBSCAN聚类分析的算法步骤如下:

  1. 从数据集D中任意选择一个未被访问过的点xi,标记为已访问。
  2. 计算xi的ϵ-邻域N(xi)={xj∈D∣d(xi,xj)≤ϵ},其中d(xi,xj)表示xi和xj之间的距离。
  3. 如果∣N(xi)∣≥MinPts,则将xi标记为核心点,并将N(xi)中的所有未被访问过的点加入一个队列Q,表示它们属于同一个簇C。
  4. 如果∣N(xi)∣<MinPts,则将xi标记为边界点或噪声点,并转到步骤6。
  5. 重复以下过程,直到队列Q为空:
    • 从队列Q中弹出一个点xk,标记为已访问。
    • 计算xk的ϵ-邻域N(xk)。
    • 如果∣N(xk)∣≥MinPts,则将xk标记为核心点,并将N(xk)中的所有未被访问过的点加入队列Q,表示它们属于同一个簇C。
    • 如果∣N(xk)∣<MinPts,则将xk标记为边界点。
  6. 如果数据集D中还有未被访问过的点,转到步骤1,否则结束算法。

6.3.2.现实中部署分组

我现在有一张最佳的file,k,m的表,我已经知道了各个文件大小如何选择数据块k,冗余块m的大小,将会得到最小的存储成本和最高的数据可靠性之间的权衡,但是如果说将这张表直接给公司,让公司给每个边缘服务器都部署上

unique((k,m))个文件配置显然是不合理的,因为每个配置文件都会生成对应的存储池,存储池的存在本身就会占用服务器的存储成本,如果在每个边缘服务器都生成unique((k,m))个文件配置对应的存储池,那存储消耗是巨大的,不可取的,故我们给出如下方案。

如,0MB–200MB被分为一大组,即小于140MB的文件的大组文件配置为k,m=(5,3)中,每大组的文件配置按最高的k,m配置向下兼容的方法,剩余数据按类似的方法进行分组,大约分5组即可,分组不能过多,不能超越超越总存储成本。

filesizekmgoal
10210.86
20220.75
30310.78
190430.78
200530.92

相关文章:

纠删码参数自适应匹配问题ECP-AMP实验方案(中)

6.方法设计 6.1.数据获取 为了收集不同的文件大小和纠删码参数对性能指标的影响&#xff0c;本文在Hadoop平台上进行了模拟实验。Hadoop是一种开源的分布式存储和计算框架&#xff0c;它可以支持不同类型的纠删码&#xff0c;并提供了一些应用程序接口和工具来测试和评估纠删…...

在设计接口时,什么时候应该用路径参数,什么时候将数据保存到方法体中,它们各自的优势是什么?

在设计 RESTful API 接口时&#xff0c;选择将数据放在路径参数&#xff08;Path Parameters&#xff09;还是方法体&#xff08;Request Body&#xff09;中&#xff0c;取决于具体的需求和使用场景。每种方式都有其优势和适用的场景。 路径参数&#xff08;Path Parameters&a…...

JVa冒泡排序

------------------------------冒泡排序--------------- let arry[1,2,3,4,5,6]; let temo;//容器交换 //两层循环 for(let i1;i<arry.length;i){ for(let j0;j<arry.length-i;j){ if(arry[j]>arry[j1]){ temparry[j]; arry[j]arry[j1]; arry[j1]temp; } } } console…...

10/11

一、ARM课程大纲 二、ARM课程学习的目的 2.1 为了找到一个薪资水平达标的工作&#xff08;单片机岗位、驱动开发岗位&#xff09; 应用层(APP) 在用户层调用驱动层封装好的API接口&#xff0c;编写对应的API接口 ----------------------------------------------------…...

C语言复习第6章 指针(未完成)

目录 一、内存单元与指针1.1 内存单元与内存单元的编号(地址/指针)1.2 内存单元的编号是如何产生的?1.3 地址/内存单元的编号/指针 本身是不需要保存的1.4 32/64位机器最多可以管理多大的内存空间?1.5 怎么计算指针(地址/编号)的大小 二、指针到指针变量2.1 怎么把二进制转换…...

Carrier Aggregation 笔记

### Carrier Aggregation 笔记 #### 引言 - Carrier Aggregation&#xff08;CA&#xff09;是 LTE 高级技术之一&#xff0c;srsRAN 4G 支持在 srsENB 和 srsUE 中进行双载波聚合。 - 使用 srsRAN 4G 进行 CA 实验需要能够调谐不同频率的 RF 设备&#xff0c;例如 Ettus Rese…...

JAVA的ArrayList 和 LinkedList的区别

ArrayList 和 LinkedList 都是 Java 中常用的 List 接口的实现类,主要的区别有: 1. 底层数据结构不同 -ArrayList 底层使用的是动态数组数据结构,LinkedList 底层使用的是双向链表数据结构。 2. 获取元素效率不同 ArrayList 支持快速随机访问,通过索引直接获取元素,时间复杂…...

AI知识库如何提升服装电商的运营效率

随着人工智能技术的飞速发展&#xff0c;AI知识库在服装电商领域的应用日益广泛。AI知识库作为一个集成了海量数据、通过高级算法进行智能分析和处理的信息系统&#xff0c;正在深刻改变服装电商的运营模式和效率。本文将详细阐述AI知识库在商品信息管理、库存管理、订单处理等…...

鸿蒙开发(NEXT/API 12)【使用fetch发送网络请求】远场通信服务

场景介绍 发送一个HTTP请求&#xff0c;也可以设置请求头和请求体等参数&#xff0c;并返回来自服务器的HTTP响应。使用Promise异步回调。常用于获取资源&#xff0c;支持流处理和通过拦截器来处理请求和响应。 接口说明 接口名描述fetch(request: Request): Promise发送一个…...

详细解读“霸王面”战术

“霸王面”战术是指在没有得到雇主面试通知的情况下&#xff0c;强行加入面试&#xff0c;以此争取工作机会的求职策略。以下将以3000字左右的篇幅&#xff0c;通过生动形象的例子详细解释这一战术。 一、背景介绍 在当今竞争激烈的就业市场中&#xff0c;求职者需要经历网申…...

【网络安全】注册流程:电子邮件验证绕过

未经许可,不得转载。 文章目录 正文步骤1:修改电子邮件参数步骤2:拦截请求正文 目标:https://app.example.me 注册新账户时,需要输入邮箱进行注册,再在邮箱中验证链接。电子邮件验证链接如下所示: https://app.example.me/signup/activation?token=c6dc625e-5b5a-46…...

Spring和Spring Boot事务讲解和案例示范

引言 Spring框架提供了强大的事务管理支持&#xff0c;使得开发者能够更轻松地实现事务控制。在本篇文章中&#xff0c;我们将深入探讨Spring的事务管理机制&#xff0c;特别是编程式事务管理、声明式事务管理以及在多数据源环境下的事务处理。 第一章 编程式事务管理 编程式…...

前端的全栈混合之路Meteor篇:关于前后端分离及与各框架的对比

这篇属于番外&#xff0c;属于技术性的讨论文&#xff0c;主要谈一下可能困惑不少人的问题。meteor看似一个前后端混合的框架&#xff0c;但实际上它并不是前后端混合的&#xff0c;只是共享了一个数据结构&#xff08;数据对象&#xff09;。现实中很多团队都说是前后端分离的…...

OJ在线评测系统 微服务 OpenFeign调整后端下 nacos注册中心配置 不给前端调用的代码 全局引入负载均衡器

OpenFeign内部调用二 4.修改各业务服务的调用代码为feignClient 开启nacos注册 把Client变成bean 该服务仅内部调用&#xff0c;不是给前端的 将某个服务标记为“内部调用”的目的主要有以下几个方面&#xff1a; 安全性: 内部API通常不对外部用户公开&#xff0c;这样可以防止…...

QD1-P19 HTML 总结

本节简单总结&#xff1a;《前端学习笔记1》专题前18篇文章关于HTML的内容。 下一节开始学习CSS了。HTML还是挺易学的&#xff0c;比Linux命令容易。 本节视频 www.bilibili.com/video/BV1n64y1U7oj?p19 ‍ 在前面18节中&#xff0c;我们了解了HTML的基础知识&#xff1a; …...

Android Framework AMS(03)AMS关键类解读

该系列文章总纲链接&#xff1a;专题总纲目录 Android Framework 总纲 本章关键点总结 & 说明&#xff1a; 说明&#xff1a;本章节主要涉AMS的关键类及其设计理念的解读&#xff0c;主要关注图中下方AMS关键类解读部分即可。这么做的目的是为了后面章节分析AMS时更容易理解…...

Pygame开发贪吃蛇

Pygame专为Python设计&#xff0c;支持多平台&#xff08;如Windows、Mac OS X、Linux、Android等&#xff09;&#xff0c;提供简单易用的API来创建2D游戏。它不仅仅局限于游戏开发&#xff0c;还可用于图形界面和音频应用。 Pygame提供了简洁的API&#xff0c;使得开发者可以…...

Linux进程间通信(个人笔记)

Linux进程通信 1.进程通信介绍1.1进程间通信目的1.2进程间通信发展1.3进程间通信的具体分类 2.管道2.1匿名管道2.1.1代码实例2.1.2 fork共享管道原理2.1.3 管道的读写规则与特点2.1.4 进程池 2.2 命名管道2.2.1 命名管道的创建2.2.2匿名管道与命名管道的区别2.2.3代码实例 3.Sy…...

SAP S/4HANA 迁移:IT 高管实用指南

新版《通往SAP S/4HANA之路》指南为计划从SAP ERP或SAP S/4HANA本地版本迁移到云端的组织提供了全面的参考。随着数字化转型的加速&#xff0c;尤其是在面临挑战的汽车行业等领域&#xff0c;企业必须采用云ERP解决方案&#xff0c;例如SAP S/4HANA云私有版&#xff0c;以应对瞬…...

Qt源码-Qt多媒体音频框架

Qt 多媒体音频框架 一、概述二、音频设计1. ALSA 基础2. Qt 音频类1. 接口实现2. alsa 插件实现 一、概述 环境详细Qt版本Qt 5.15操作系统Deepin v23代码工具Visual Code源码https://github.com/qt/qtmultimedia/tree/5.15 这里记录一下在Linux下Qt 的 Qt Multimedia 模块的设…...

卸载PLSQL及标准卸载流程

目录 1. 卸载PLSQL2. 删除注册表3. 删除数据信息 1. 卸载PLSQL 等待进度条走完 2. 删除注册表 regedit 右击删除 3. 删除数据信息 由于AppData是隐藏文件&#xff0c;需要勾选隐藏的项目。 重启电脑&#xff0c;PLSQL就卸载成功了。...

如何使用ssm实现办公OA系统0

TOC 10907ssm办公OA系统10907ssm0 第一章 绪 论 1.1背景及意义 系统管理也都将通过计算机进行整体智能化操作&#xff0c;对于办公OA系统所牵扯的管理及数据保存都是非常多的&#xff0c;例如管理员&#xff1b;主页、个人中心、公司公告管理、设备分类管理、办公设备管理、…...

IPguard与Ping32—选择合适的企业数据保护解决方案

在数字化时代&#xff0c;企业面临着各种数据安全挑战&#xff0c;选择合适的保护工具至关重要。IPguard与Ping32是两款备受关注的数据保护软件&#xff0c;但它们各自的功能和适用场景有所不同&#xff0c;企业在选择时需根据自身需求做出明智决策。 Ping32&#xff1a;全面的…...

2024 kali虚拟机安装教程,分两大步骤,图文讲解(2)

准备工作&#xff1a; 按照图文讲解&#xff08;1&#xff09;搭建好虚拟机&#xff0c;继续以下步骤 2024 kali虚拟机安装教程&#xff0c;分两大步骤&#xff0c;图文讲解&#xff08;1&#xff09;-CSDN博客 正式开始 1.开启&#xff0c;↑ ↓ 方向键&#xff0c;选择第一…...

【解决办法】git clone报错unable to access ‘xxx‘: SSL certificate problem

git clone 是 Git 版本控制系统中的一个基本命令&#xff0c;用于从远程仓库复制一个完整的版本库到本地。这个命令不仅复制远程仓库中的所有文件&#xff0c;还复制仓库的历史记录&#xff0c;使得你可以在本地进行版本控制操作&#xff0c;如提交&#xff08;commit&#xff…...

基于STM32的智能家居--硬件接线

分配GPIO 1.首先分配串口通讯引脚&#xff0c;该开发板中有三组串口引脚分别分配如图所示。 2.分配SPI。 3.其他为普通GPIO口&#xff0c;B8,B9模拟IIC协议与OLED屏幕进行通讯。...

mac电脑如何删除应用程序?怎么删除苹果电脑里的软件

在使用Mac电脑的过程中&#xff0c;随着时间的推移&#xff0c;我们可能会安装大量的应用程序。然而&#xff0c;这些应用程序中有很多可能只是临时使用&#xff0c;或者已经不再需要了。这些无用的应用程序不仅占据了宝贵的硬盘空间&#xff0c;还可能拖慢Mac系统的运行速度。…...

Hive优化操作(一)

Hive SQL 优化指南 在使用 Hive 进行数据分析时&#xff0c;提高查询性能至关重要。以下是一些具体的优化策略&#xff0c;帮助我们在工作中更有效地管理和查询数据。 一、 减少数据量进行优化 1. 分区表优化 分区是一种表的子集&#xff0c;用于按某一列&#xff08;如日期…...

Vue中常用指令——(详解,并附有代码)

文章目录 一.指令合集1.0 概述1.1 插值表达式1.2 v-text/v-html1.3 v-show/ v-if1.4 v-on1.4.1 内联语句1.4.2 事件处理函数 1.5 v-bind1.6 Test1.7 v-for 一.指令合集 内容渲染指令&#xff08;v-html、v-text&#xff09;条件渲染指令&#xff08;v-show、v-if、v-else、v-e…...

redistemplate实现点赞相关功能

使用Redis的SET数据结构来存储每个实体的点赞用户ID列表&#xff0c;方便进行点赞数量的计数和用户点赞状态的检查。以下是一个小demo&#xff0c;只提供简单思路。 Service public class LikeService {Autowiredprivate RedisTemplate redisTemplate;//点赞public Long like(…...