【Java万花筒】缓存与存储:Java应用中的数据处理利器

激发性能之源:深度剖析Java开发中的五大数据缓存与存储方案

前言

在现代软件开发中,高效地处理和存储数据是至关重要的任务。本文将介绍一系列在Java应用中广泛使用的数据缓存与存储库,涵盖了Ehcache、Redisson、Apache Cassandra、Hazelcast以及Apache Ignite。这些库不仅为数据的快速访问提供了解决方案,还在分布式环境下展现出强大的能力,满足了大规模应用的需求。

欢迎订阅专栏:Java万花筒

文章目录

  • 激发性能之源:深度剖析Java开发中的五大数据缓存与存储方案
    • 前言
      • 1. Ehcache
        • 1.1 基本介绍
        • 1.2 核心特性
        • 1.3 使用场景
        • 1.4 Ehcache与Spring集成
        • 1.5 Ehcache 3.x 特性
      • 2. Redisson
        • 2.1 简介与背景
        • 2.2 分布式集合
        • 2.3 分布式锁
        • 2.4 分布式队列
      • 3. Apache Cassandra
        • 3.1 简介与设计理念
        • 3.2 数据模型和CQL
        • 3.3 分布式架构和节点通信
        • 3.4 数据一致性和容错机制
      • 4. Hazelcast
        • 4.1 概述与特性
        • 4.2 分布式数据结构
        • 4.3 分布式计算
        • 4.4 高可用性和数据持久化
      • 5. Apache Ignite
        • 5.1 简介与架构
        • 5.2 分布式缓存
        • 5.3 分布式计算
        • 5.4 数据持久化和事务
    • 总结

1. Ehcache

1.1 基本介绍

Ehcache是一个开源的Java分布式缓存库,广泛用于提高应用程序性能。它通过在内存中缓存数据,减少对底层存储系统的访问,从而加速数据检索过程。Ehcache支持多种缓存策略,包括LRU(Least Recently Used)、LFU(Least Frequently Used)等。

1.2 核心特性
  • 内存存储: Ehcache主要通过内存存储数据,提供快速的数据访问。
  • 缓存策略: 支持多种缓存策略,可以根据需求配置缓存的淘汰算法。
  • 分布式支持: Ehcache可以配置为分布式缓存,适用于大规模应用程序。
1.3 使用场景

Ehcache适用于需要频繁读取但不经常更改的数据,如配置信息、静态数据等。以下是一个简单的Java示例,演示如何使用Ehcache:

// 导入Ehcache相关包
import net.sf.ehcache.Cache;
import net.sf.ehcache.CacheManager;
import net.sf.ehcache.Element;public class EhcacheExample {public static void main(String[] args) {// 创建缓存管理器CacheManager cacheManager = CacheManager.create();// 定义缓存配置Cache cache = new Cache("myCache", 10000, false, false, 5, 2);cacheManager.addCache(cache);// 将数据放入缓存Element element = new Element("key1", "value1");cache.put(element);// 从缓存中获取数据Element retrievedElement = cache.get("key1");System.out.println("Retrieved Value: " + retrievedElement.getObjectValue());// 关闭缓存管理器cacheManager.shutdown();}
}

这个示例创建了一个简单的Ehcache实例,将数据放入缓存并从中检索。在实际应用中,可以根据需求调整缓存配置和策略。

1.4 Ehcache与Spring集成

Ehcache与Spring框架无缝集成,提供了对缓存的便捷管理。通过在Spring配置文件中配置Ehcache的CacheManager,可以轻松实现缓存的注入和使用。以下是一个简单的示例:

// 导入Spring相关包
import org.springframework.cache.annotation.Cacheable;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.cache.ehcache.EhCacheCacheManager;@Configuration
public class EhcacheSpringIntegration {@Beanpublic EhCacheCacheManager cacheManager() {return new EhCacheCacheManager(ehCacheManager());}@Beanpublic net.sf.ehcache.CacheManager ehCacheManager() {return net.sf.ehcache.CacheManager.create();}@Cacheable(value = "myCache", key = "#key")public String getCachedData(String key) {// Simulating data retrieval from a data sourcereturn "Cached Value for Key: " + key;}
}

通过上述配置,可以在Spring应用中轻松使用Ehcache进行缓存管理,同时通过@Cacheable注解实现方法级别的缓存。

1.5 Ehcache 3.x 特性

Ehcache 3.x引入了许多新特性,包括对Java 8的支持、更灵活的配置选项以及对JCache标准的完整实现。以下是一个示例演示如何使用Ehcache 3.x:

// 导入Ehcache 3.x相关包
import org.ehcache.Cache;
import org.ehcache.config.CacheConfiguration;
import org.ehcache.config.builders.CacheConfigurationBuilder;
import org.ehcache.config.builders.ResourcePoolsBuilder;
import org.ehcache.config.units.MemoryUnit;
import org.ehcache.core.config.DefaultConfiguration;
import org.ehcache.core.spi.service.LocalPersistenceService;
import org.ehcache.impl.config.persistence.DefaultPersistenceConfiguration;public class Ehcache3Example {public static void main(String[] args) {// 创建Ehcache 3.x缓存配置CacheConfiguration<Long, String> cacheConfiguration = CacheConfigurationBuilder.newCacheConfigurationBuilder(Long.class, String.class, ResourcePoolsBuilder.heap(100).offheap(10, MemoryUnit.MB)).build();// 创建Ehcache 3.x缓存Cache<Long, String> cache = new DefaultConfiguration(new DefaultPersistenceConfiguration(LocalPersistenceService.PersistenceServiceName.LOCAL),cacheConfiguration).cacheManager().createCache("myCache", cacheConfiguration);// 将数据放入缓存cache.put(1L, "Value for Key 1");// 从缓存中获取数据String retrievedValue = cache.get(1L);System.out.println("Retrieved Value: " + retrievedValue);}
}

Ehcache 3.x提供了更为灵活的配置选项,支持堆外(off-heap)内存和本地持久化等特性。

2. Redisson

2.1 简介与背景

Redisson是基于Redis的分布式Java对象存储库,提供了丰富的分布式数据结构和服务,以简化在分布式环境中的Java开发。它支持分布式集合、分布式锁、分布式队列等功能。

2.2 分布式集合

在Redisson中,分布式集合是一种强大的工具,用于在分布式环境中管理和操作数据集。它提供了多种数据结构,包括分布式列表、分布式集、分布式有序集等。

分布式列表示例:

import org.redisson.api.RList;
import org.redisson.api.RedissonClient;// 获取Redisson客户端实例
RedissonClient redisson = getRedissonClient();// 创建分布式列表
RList<String> distributedList = redisson.getList("myDistributedList");// 向列表中添加元素
distributedList.add("Element 1");
distributedList.add("Element 2");
distributedList.add("Element 3");// 从列表中获取元素
String element = distributedList.get(0);
System.out.println("Element at index 0: " + element);

分布式集示例:

import org.redisson.api.RSet;
import org.redisson.api.RedissonClient;// 获取Redisson客户端实例
RedissonClient redisson = getRedissonClient();// 创建分布式集
RSet<String> distributedSet = redisson.getSet("myDistributedSet");// 向集合中添加元素
distributedSet.add("Element A");
distributedSet.add("Element B");
distributedSet.add("Element C");// 判断元素是否存在于集合中
boolean containsElement = distributedSet.contains("Element A");
System.out.println("Contains Element A: " + containsElement);
2.3 分布式锁

分布式锁是在分布式系统中实现同步的一种重要机制。Redisson提供了简单而强大的分布式锁实现,用于确保在不同节点上的代码块的互斥执行。

分布式锁示例:

import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;// 获取Redisson客户端实例
RedissonClient redisson = getRedissonClient();// 创建分布式锁
RLock distributedLock = redisson.getLock("myDistributedLock");try {// 尝试获取锁distributedLock.lock();// 执行需要同步的代码块System.out.println("Locked code block...");} finally {// 释放锁distributedLock.unlock();System.out.println("Lock released.");
}
2.4 分布式队列

分布式队列在处理异步任务和消息传递时非常有用。Redisson提供了可靠的分布式队列,支持在不同节点之间安全地传递和处理消息。

分布式队列示例:

import org.redisson.api.RQueue;
import org.redisson.api.RedissonClient;// 获取Redisson客户端实例
RedissonClient redisson = getRedissonClient();// 创建分布式队列
RQueue<String> distributedQueue = redisson.getQueue("myDistributedQueue");// 向队列中添加消息
distributedQueue.offer("Message 1");
distributedQueue.offer("Message 2");
distributedQueue.offer("Message 3");// 从队列中获取消息
String message = distributedQueue.poll();
System.out.println("Message from queue: " + message);

通过使用Redisson提供的分布式集合、分布式锁和分布式队列,你可以更轻松地处理分布式环境中的数据和同步需求。

3. Apache Cassandra

3.1 简介与设计理念

Apache Cassandra是一个分布式NoSQL数据库,设计用于处理大规模数据集,具有高可用性和可伸缩性。它采用分布式架构,支持水平扩展。

3.2 数据模型和CQL

Apache Cassandra的数据模型是基于列族(Column Family)的NoSQL模型。它使用CQL(Cassandra Query Language)作为查询语言,类似于SQL,但在分布式环境中更适用。

数据模型示例:

在Cassandra中,数据以行和列的形式组织在列族中,每个行键都唯一标识一行数据。

CREATE TABLE user_profiles (user_id UUID PRIMARY KEY,username TEXT,email TEXT,age INT
);

CQL示例:

-- 插入数据
INSERT INTO user_profiles (user_id, username, email, age)
VALUES (uuid(), 'john_doe', 'john.doe@email.com', 25);-- 查询数据
SELECT * FROM user_profiles WHERE user_id = ?;
3.3 分布式架构和节点通信

Cassandra的分布式架构使其能够处理大规模数据并实现高可用性。它采用无中心化的节点通信方式,每个节点都是对等的,数据分布在整个集群中。

分布式架构示例:

  • 多个节点组成一个集群,每个节点负责一部分数据。
  • 数据复制策略确保数据的冗余和高可用性。
  • 节点之间通过Gossip协议进行通信,动态地维护集群状态。
3.4 数据一致性和容错机制

Cassandra通过使用分布式一致性协议来确保数据的一致性。它支持可调节的一致性级别,开发人员可以根据应用程序的需求选择适当的一致性水平。

一致性级别示例:

  • ONE:只需要一个节点确认写操作即可。
  • QUORUM:大多数节点确认写操作,适用于高一致性要求的场景。
  • ALL:所有节点确认写操作,提供最高一致性级别。

Cassandra还具有容错机制,能够处理节点故障和数据中心故障,确保系统的可用性和稳定性。

在下一部分,我们将深入探讨Apache Cassandra的性能优化和最佳实践,以及与其他技术集成的方法。

4. Hazelcast

4.1 概述与特性

Hazelcast是一个开源的分布式内存数据网格,提供了高度可扩展的分布式数据结构和计算能力。它允许将数据存储在内存中,以提供快速的数据访问。

4.2 分布式数据结构

Hazelcast提供了丰富的分布式数据结构,使开发人员能够轻松处理分布式环境中的数据。

分布式映射(Map)示例:

import com.hazelcast.core.Hazelcast;
import com.hazelcast.core.HazelcastInstance;
import java.util.Map;// 获取Hazelcast实例
HazelcastInstance hazelcastInstance = Hazelcast.newHazelcastInstance();// 创建分布式映射
Map<String, String> distributedMap = hazelcastInstance.getMap("myDistributedMap");// 向映射中添加键值对
distributedMap.put("key1", "value1");
distributedMap.put("key2", "value2");
distributedMap.put("key3", "value3");// 从映射中获取值
String value = distributedMap.get("key2");
System.out.println("Value for key2: " + value);

分布式队列(Queue)示例:

import com.hazelcast.core.Hazelcast;
import com.hazelcast.core.HazelcastInstance;
import java.util.Queue;// 获取Hazelcast实例
HazelcastInstance hazelcastInstance = Hazelcast.newHazelcastInstance();// 创建分布式队列
Queue<String> distributedQueue = hazelcastInstance.getQueue("myDistributedQueue");// 向队列中添加元素
distributedQueue.offer("Element A");
distributedQueue.offer("Element B");
distributedQueue.offer("Element C");// 从队列中获取元素
String element = distributedQueue.poll();
System.out.println("Element from queue: " + element);
4.3 分布式计算

除了分布式数据结构外,Hazelcast还支持分布式计算,允许在整个集群上执行计算任务。

分布式计算示例:

import com.hazelcast.core.Hazelcast;
import com.hazelcast.core.HazelcastInstance;
import com.hazelcast.core.IMap;// 获取Hazelcast实例
HazelcastInstance hazelcastInstance = Hazelcast.newHazelcastInstance();// 创建分布式映射
IMap<String, Integer> distributedMap = hazelcastInstance.getMap("myDistributedMap");// 在映射中存储数据
distributedMap.put("key1", 10);
distributedMap.put("key2", 20);
distributedMap.put("key3", 30);// 分布式计算:计算所有值的总和
int sum = distributedMap.aggregate(new SumAggregator());
System.out.println("Sum of values: " + sum);
4.4 高可用性和数据持久化

Hazelcast具有内建的高可用性机制,支持集群中的节点故障自动恢复。此外,它还提供了数据持久化选项,确保在节点重启后数据不丢失。

在下一节中,我们将深入研究Hazelcast的配置和集成,以及如何优化性能以满足各种应用场景的需求。

5. Apache Ignite

5.1 简介与架构

Apache Ignite是一个分布式数据库与计算平台,具有内存存储和计算功能。它支持将数据存储在内存中,以提供低延迟的数据访问。

5.2 分布式缓存

Apache Ignite提供了强大的分布式缓存功能,允许将数据存储在内存中,提高数据访问速度。

分布式缓存示例:

import org.apache.ignite.Ignite;
import org.apache.ignite.Ignition;
import org.apache.ignite.cache.CacheMode;
import org.apache.ignite.configuration.CacheConfiguration;// 启动Ignite节点
Ignite ignite = Ignition.start();// 配置缓存
CacheConfiguration<String, String> cacheConfig = new CacheConfiguration<>("myDistributedCache");
cacheConfig.setCacheMode(CacheMode.PARTITIONED);// 获取或创建分布式缓存
IgniteCache<String, String> distributedCache = ignite.getOrCreateCache(cacheConfig);// 向缓存中添加数据
distributedCache.put("key1", "value1");
distributedCache.put("key2", "value2");
distributedCache.put("key3", "value3");// 从缓存中获取数据
String value = distributedCache.get("key2");
System.out.println("Value for key2: " + value);
5.3 分布式计算

Apache Ignite支持分布式计算,允许在集群中执行复杂的计算任务。

分布式计算示例:

import org.apache.ignite.Ignite;
import org.apache.ignite.Ignition;
import org.apache.ignite.compute.ComputeTask;
import org.apache.ignite.resources.IgniteInstanceResource;// 启动Ignite节点
Ignite ignite = Ignition.start();// 定义计算任务
public class MyComputeTask implements ComputeTask<String, Integer> {@IgniteInstanceResourceprivate Ignite ignite;@Overridepublic Map<? extends ComputeJob, ClusterNode> map(List<ClusterNode> subgrid, String arg) {// 在子网格中分配计算任务// ...}@Overridepublic Integer reduce(List<ComputeJobResult> results) {// 汇总计算结果// ...}
}// 执行分布式计算任务
IgniteCompute compute = ignite.compute();
Integer result = compute.execute(new MyComputeTask(), "argument");
System.out.println("Result of computation: " + result);
5.4 数据持久化和事务

Apache Ignite提供了数据持久化和事务支持,确保数据的持久性和一致性。

数据持久化和事务示例:

import org.apache.ignite.Ignite;
import org.apache.ignite.Ignition;
import org.apache.ignite.configuration.CacheConfiguration;
import javax.cache.configuration.FactoryBuilder;// 启动Ignite节点
Ignite ignite = Ignition.start();// 配置持久化缓存
CacheConfiguration<String, String> cacheConfig = new CacheConfiguration<>("myPersistentCache");
cacheConfig.setReadThrough(true);
cacheConfig.setWriteThrough(true);
cacheConfig.setCacheStoreFactory(FactoryBuilder.factoryOf(MyCacheStore.class));// 获取或创建持久化缓存
IgniteCache<String, String> persistentCache = ignite.getOrCreateCache(cacheConfig);// 在事务中进行数据操作
try (Transaction tx = ignite.transactions().txStart()) {persistentCache.put("key1", "value1");persistentCache.put("key2", "value2");tx.commit();
}

在接下来的部分,我们将深入研究Apache Ignite的集群配置和优化,以及如何与其他技术进行集成。

总结

在数据驱动的时代,选择合适的数据缓存与存储库是保障应用性能和可伸缩性的关键一步。Ehcache作为经典的内存缓存工具,Redisson提供了强大的分布式对象存储,Apache Cassandra在大规模数据场景下表现卓越,Hazelcast和Apache Ignite则为分布式计算和内存存储提供了强大的支持。通过深入了解这些库,Java开发者将能够更好地选择和使用适合自己应用场景的数据处理工具。

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

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

相关文章

js触发input的打开文件选择器,将本地图片回显以及上传

js触发input的打开文件选择器&#xff0c;将本地图片回显以及上传 你可以通过以下 JavaScript 代码触发文件选择器&#xff1a;这里的场景不是通过input标签来触达的文件选择器&#xff0c;这样对于样式较为复杂的上传可以在html结构上保持清爽愉快&#xff0c;不用多添加一个i…

java web mvc-08-Grails 入门介绍

拓展阅读 Spring Web MVC-00-重学 mvc mvc-01-Model-View-Controller 概览 web mvc-03-JFinal web mvc-04-Apache Wicket web mvc-05-JSF JavaServer Faces web mvc-06-play framework intro web mvc-07-Vaadin web mvc-08-Grails 开源 The jdbc pool for java.(java …

R语言【taxa】——is_*():检查对象是否为某个类

is_classification(x) 检查对象是否为 classification 类。 is_internode(x) 检查每个分类单元是否为节间。节间是指一个分类单元恰好有一个上级分类单元和 一个下级分类单元。这些分类群可以在不丢失它们之间的关系信息的情况下被移除。 x <- taxonomy(c(Carnivora, Felid…

设置Django中的静态文件

在Django中&#xff0c;静态文件&#xff08;如CSS、JavaScript、图片等&#xff09;是网站开发中不可或缺的一部分。为了让网站能够正确加载这些静态文件&#xff0c;我们需要在Django中进行相应的设置。 首先&#xff0c;我们需要在settings.py文件中设置STATIC_URL&#xf…

Unity通用渲染管线升级URP、HDRP

Unity通用渲染管线升级URP、HDRP 一、Build-in Pipline升级到 URP 一、Build-in Pipline升级到 URP 安装URP包 升级所有材质&#xff08;升级完成后材质会变成紫红色&#xff0c;Shader丢失&#xff0c;此为正常现象&#xff09; 创建 UniversalRenderPipelineAsset 配置文…

Pillow图像处理:从零开始的奇妙之旅

图像处理&#xff0c;就像是一场神奇的冒险&#xff0c;让我们的照片变得更有趣、更生动。而在这个冒险的旅途中&#xff0c;Pillow就如同一位魔法师&#xff0c;为我们开启了无尽的可能性。无论你是刚刚踏入图像处理领域的小白&#xff0c;还是已经略有基础的程序员&#xff0…

深入Kafka broker

一、协议设计 颗粒度, PRODUCE和FETCH中支持topic,partion等层级的颗粒度;测试友好, 基于session_id和epoch确定一条拉取链路的fetch session;全量增量结合, FetchRequest中的全量拉取和增量拉取;基本结构: headerbody。 常见header: api_key, api_version, corelation_id, cl…

opencv中的几个重要函数

对于我们经常使用python的同学&#xff0c;尤其还习惯使用numpy库&#xff0c;突然上手opencv c时&#xff0c;就会感觉想要一个结果&#xff0c;python一行代码搞定&#xff0c;但是c却无处下手&#xff0c;因此特总结遇到的几个重要opencv函数&#xff0c;方便能够快速获取跟…

8.前端--CSS-显示模式

元素的显示模式 元素显示模式就是元素&#xff08;标签&#xff09;以什么方式进行显示&#xff0c;比如<div>自己占一行&#xff0c;比如一行可以放多个<span>。 1.块元素 常见的块元素 常见的块元素&#xff1a;<h1>~<h6>、<p>、<div>、…

SQLyog的使用

快捷键功能备注对象浏览器窗口及查询执行快捷键  F5刷新对象浏览器窗口 CtrlB 切换鼠标光标焦点至对象浏览器窗口&#xff1b; F8执行当前行SQL&#xff0c;并允许编辑查询结果 F9执行查询/执行当前行的SQL 连接  CtrlM创建新连接 CtrlN以当前连接属性创建新连接 Ctr…

如何预防服务器IP被劫持,危害有什么?

服务器IP被劫持是一种严重的网络安全问题&#xff0c;攻击者通过篡改服务器的IP地址&#xff0c;将网络流量重定向到恶意服务器或网站&#xff0c;导致用户无法正常访问目标服务器&#xff0c;并可能面临数据泄露、恶意软件感染等安全风险。了解服务器IP被劫持的危害和预防措施…

理解Java中的AQS

一、定义 AQS:AbstractQueuedSynchronizer(抽象队列同步器)&#xff0c;是一个用于构建锁和同步器的抽象的同步框架。AQS 提供了一种可扩展的基础&#xff0c;允许开发者实现各种形式的同步控制机制。 例如&#xff1a;独占锁&#xff08;ReentrantLock&#xff09;、共享锁&a…

Jumpserver中安装httpx

查看已安装的包 pip freeze # python -V # Python 2.7.5安装anyio 刚开始直接pip install httpx&#xff0c;未设置版本号&#xff0c;因已有idna2.7&#xff0c;所以出现版本不兼容的现象 anyio 3.0.0 requires idna>2.8, but you have idna 2.7 which is incompatible.…

船的最小载重量-算法

说明&#xff1a;题解完全是从leetCode上拉下来的&#xff0c;在这里只是作为一个备份&#xff0c;怕之后找不着了。同时也分享给大家&#xff0c;这个题目用了一个我之前从未遇到的思路。 原题&#xff1a;船的最小载重量-leetCode1101 题目&#xff08;看懂题目了吗&#xff…

STM32 I2C的多设备通信协议设计与实现

在STM32微控制器上使用I2C进行多设备通信需要设计合适的通信协议&#xff0c;以确保每个设备能够正确识别并响应主设备的命令。在本文中&#xff0c;我们将针对STM32的I2C多设备通信协议进行设计与实现&#xff0c;并展示如何使用代码来实现此协议。 要实现STM32的I2C多设备通…

JavaScript快速入门四

文章目录 事件事件的绑定事件监听机制常见事件点击事件焦点事件加载事件鼠标事件键盘事件选择和改变表单事件 事件 概述&#xff1a;某些组件被执行了某些操作后&#xff0c;触发了某些代码的执行 事件的绑定 方法一&#xff1a;直接在 HTML 标签上&#xff0c;指定事件的属性…

自定义通用返回对象

目的&#xff1a;给返回对象补充一些信息&#xff0c;告诉前端这个请求在业务层面上是成功还是失败&#xff0c;以及具体的描述信息。 我们需要自定义错误码&#xff08;因为前端的HTTP状态码默认的值比较少&#xff09;和正常错误返回类。 ErrorCode &#xff1a; package …

python基础 - 变量

知识点1&#xff1a; print函数里可以用英文逗号, 分隔字符和变量&#xff0c;字符串要用双引号引起来&#xff0c;而变量名不用引起来&#xff0c;同时print的时候也可以直接写数学运算公式 知识点2&#xff1a; python里和用户交互的函数是input&#xff0c;但它有一个特点&…

街机模拟游戏逆向工程(HACKROM)教程:[18]分析的思路

在之前的文章,我们已经提及,得到玩家的血量,可以用这个分析出哪些想要的东西: 1、被敌人攻击 - 得到敌人某个技能的攻击力,自身的防御力。 2、被队友攻击 - 得到队友的攻击力。 3、被道具击中 - 得到道具的攻击力。 4、使用扣血技能 - 得到使用技能扣除的血量值。 5、…

pikachu_csrf通关攻略

csrf&#xff08;get&#xff09; 打开pikachu靶场&#xff1a; 1. 根据提示给的账户密码进行登录 2. 打开代理拦截数据包将拦截数据发送到已打开的burp中&#xff1a; 修改数据进行发包&#xff1a; 从上面的url可见&#xff0c;修改用户信息的时候&#xff0c;是不带任何不…