Redisson分布式集合原理及应用
Redisson是一个用于Redis的Java客户端,它简化了复杂的数据结构和分布式服务的使用。
适用场景对比
数据结构 | 适用场景 | 优点 |
---|---|---|
RList | 消息队列、任务队列、历史记录 | 分布式共享、阻塞操作、分页查询 |
RMap | 缓存、配置中心、键值关联数据 | 支持键值对、分布式事务、TTL |
RSet | 去重集合、唯一性校验 | 自动去重、交并差集运算 |
RQueue | 先进先出队列(FIFO) | 严格队列顺序、阻塞消费 |
RDeque | 双端队列(支持头尾操作) | 支持 addFirst /addLast 等操作 |
RMap简介
-
接口继承:RMap实现了
java.util.Map
和java.util.concurrent.ConcurrentMap
接口,这意味着它可以像普通的Java Map一样使用,并且支持并发操作。 -
功能特性:
- 支持异步、非阻塞的操作方法,例如
putAsync
,getAsync
等。 - 提供了原子性操作,如
putIfAbsent
,replace
,remove
等。 - 支持键值对的过期时间设置,可以为每个键单独设定有效时间和最长闲置时间。
- 支持本地缓存,可以在客户端缓存一些数据以减少网络请求次数。
- 具有写入策略选项,比如WRITE_BEHIND,适合在高负载情况下优化写入性能。
- 支持异步、非阻塞的操作方法,例如
使用示例
以下是使用RMap的一些基本操作示例:
创建RMap实例
RMap<String, String> map = redisson.getMap("myMap");
添加元素
map.put("key1", "value1");
异步添加元素
map.putAsync("key2", "value2").thenAccept(result -> {// Handle result here
});
获取元素
String value = map.get("key1");
设置过期时间
// 添加键值对并设置存活时间为10秒
map.put("key3", "value3", 10, TimeUnit.SECONDS);
底层实现
- 存储:RMap底层使用的数据类型是Redis的String, Redisson 会为每个 RMap 实例生成一个唯一的命名空间(如 redisson_map_{mapName}:{key}),并将每个键值对作为独立的 Redis Key 存储。
- 分布式:由于Redis本身是分布式的,RMap自然也具备分布式的特点,可以跨多个节点进行扩展。
- 事务与锁:Redisson提供了对RMap操作的事务支持以及分布式锁机制,保证了在并发环境下数据的一致性和完整性。
RList 简介
Redisson 的 RList
是一个基于 Redis 的分布式列表(List)实现,它封装了 Redis 的 List 数据结构,并提供了与 Java 标准 java.util.List
接口兼容的 API。RList
支持在分布式环境中高效地操作列表数据,适用于需要共享、并发访问和跨节点同步的场景。
核心特性
-
分布式共享:
RList
的数据存储在 Redis 服务器中,多个客户端可以跨节点共享和修改同一个列表,实现分布式数据一致性。 -
线程安全:
所有对RList
的操作都是线程安全的,Redisson 通过 Redis 的原子操作(如LPUSH
、RPUSH
、LPOP
等)保证并发下的数据一致性。 -
支持阻塞操作:
提供blocking
和blockingDeque
操作(如takeFirst()
、takeLast()
),在列表为空时阻塞直到有元素可用,适合实现生产者-消费者模式。 -
分页和范围操作:
支持通过索引范围(subList()
)或分页(getRange()
)高效读取部分数据,适用于大数据量场景。 -
自动序列化:
Redisson 提供了默认的序列化机制(如 JSON、Kryo),开发者无需手动处理键值的序列化与反序列化。 -
高可用与扩展性:
借助 Redis 的主从复制、集群分片和哨兵机制,RList
可以实现高可用性和水平扩展。
底层实现原理
-
Redis List 数据结构:
RList
底层基于 Redis 的 List 类型,其内部实现是双向链表(3.2 版本前为ziplist
或linkedlist
,3.2 后为quicklist
)。- LPUSH/RPUSH:在列表头部/尾部插入元素。
- LPOP/RPOP:从列表头部/尾部弹出元素。
- LRANGE:获取指定范围内的元素。
-
Redisson 封装:
Redisson 通过发送标准 Redis 命令操作 List,并在客户端缓存部分数据(可配置),减少网络往返次数。
使用场景
-
消息队列
- 通过
RList
实现分布式消息队列,使用RPush
(生产者)和LPop
(消费者)操作。 - 支持阻塞操作(
BLPop
/BRPop
),避免轮询开销。
- 通过
-
任务队列
- 存储待处理任务,多个工作节点并发消费任务(如定时任务、异步处理)。
-
历史记录
- 记录用户操作日志、浏览记录等,通过
RPush
添加新记录,LRANGE
查询历史。
- 记录用户操作日志、浏览记录等,通过
-
排行榜/最新动态
- 结合
RList
和RMap
实现动态更新的排行榜(如热门文章、最新评论)。
- 结合
-
分页查询
- 预先将数据填充到
RList
,通过LRANGE
分页读取数据(如社交平台的消息流)。
- 预先将数据填充到
-
缓存预热
- 在分布式系统中共享预热数据(如热点商品 ID 列表)。
示例代码
// 初始化 Redisson 客户端
Config config = new Config();
config.useSingleServer().setAddress("redis://127.0.0.1:6379");
RedissonClient redisson = Redisson.create(config);// 获取 RList 实例
RList<String> list = redisson.getList("myList");// 添加元素
list.add("item1");
list.addFirst("item0"); // 插入到头部
list.addLast("item2"); // 插入到尾部// 获取元素
String firstItem = list.get(0); // 通过索引访问
String removedItem = list.remove(0); // 移除并返回索引处元素// 阻塞操作(等待元素可用)
String item = list.takeFirst(); // 阻塞直到有元素可取// 分页查询
List<String> subList = list.subList(0, 10); // 获取前10个元素// 关闭客户端
redisson.shutdown();
性能与注意事项
-
性能特点:
- 头尾操作高效:
addFirst()
、addLast()
、removeFirst()
、removeLast()
时间复杂度为 O(1)。 - 中间索引访问低效:
get(index)
或set(index, value)
需遍历链表,时间复杂度为 O(N)。 - 大数据量分页:使用
subList()
或LRANGE
可避免一次性加载全部数据。
- 头尾操作高效:
-
网络开销:
所有操作需通过网络与 Redis 交互,相比本地 Java List 会有额外延迟。建议仅在需要分布式共享的场景中使用。 -
内存管理:
Redis 是内存数据库,需监控RList
的大小,避免内存溢出。可通过trim()
方法限制列表长度。 -
持久化与故障转移:
- 依赖 Redis 的持久化(RDB/AOF)保障数据可靠性。
- 使用 Redis Sentinel 或 Cluster 时,
RList
会自动处理故障转移。
与 Redis 原生命令的映射
Redisson 方法 | Redis 命令 | 说明 |
---|---|---|
add(value) | RPUSH key value | 向列表尾部添加元素 |
addFirst() | LPUSH key value | 向列表头部添加元素 |
remove() | LPOP key | 移除并返回列表头部元素 |
removeLast() | RPOP key | 移除并返回列表尾部元素 |
get(index) | LINDEX key index | 获取指定索引的元素 |
subList(start, end) | LRANGE key start end | 获取指定范围的元素 |
相关文章:
Redisson分布式集合原理及应用
Redisson是一个用于Redis的Java客户端,它简化了复杂的数据结构和分布式服务的使用。 适用场景对比 数据结构适用场景优点RList消息队列、任务队列、历史记录分布式共享、阻塞操作、分页查询RMap缓存、配置中心、键值关联数据支持键值对、分布式事务、TTLRSet去重集…...
一种新兴的网络安全技术:XDR(Extended Detection and Response,扩展检测与响应)(Grok3 DeepSearch模式下回答)
直接回答 XDR(扩展检测与响应)是一种网络安全技术,整合多层数据(如端点、网络、云)以检测和响应威胁。研究表明,它通过AI和自动化提高安全团队效率,减少数据泄露成本。存在原生XDR(…...
使用 Qt Designer 开发
Qt Designer 是属于 Qt Creator 的 一个功能而已,Qt Designer 也叫 UI 设计师或者 UI 设计器,这都是指的同一 个东西而已。 一、在ui文件添加一个按钮 1、新建一个项目 项目名为 02_designer_example 构建系统可选择 CMake , qmake, Qbs 对…...
第7天-Python+PyEcharts实现股票分时图实战教程
分时图是金融领域常用的可视化形式,能够清晰展示价格随时间变化的趋势。本教程将手把手教你用PyEcharts库实现专业级分时图效果。 一、环境准备 bash 复制 下载 pip install pyecharts # 核心可视化库 pip install pandas # 数据处理支持 二、基础分时图实现 1. 模拟…...
Zenmap代理情况下无法扫描ip
原因是开了代理会报错 error “only ethernet devices can be used for raw scans on Windows” 在扫描参数后加 -sT -Pn,但会导致结果太多 例如:nmap -sT -T4 -A -v -Pn 10.44.2.0/24 如果你只是想找没人用的IP,你不需要搞复杂的原始层扫描&…...
JAVA打飞机游戏设计与实现(论文+源代码)【源码+文档+部署】
1 绪论 1.1 手机软件现状 在信息社会中,手机及其他无线设备越来越多的走进普通百姓的工作和生活,随着信息网络化的不断进展,手机及其他无线设备上网络势在必行。但是传统手机存在以下弊端: 1. 传统手机出厂时均由硬件厂商固化…...
C++学习:六个月从基础到就业——多线程编程:std::thread基础
C学习:六个月从基础到就业——多线程编程:std::thread基础 本文是我C学习之旅系列的第五十四篇技术文章,也是第四阶段"并发与高级主题"的第一篇,介绍C11引入的多线程编程基础知识。查看完整系列目录了解更多内容。 引言…...
深入理解指针(一)
1.内存和地址 2.指针变量和地址 3.指针变量类型的意义 4.指针运算 1. 内存和地址 1.1 内存 在讲内存和地址之前,为了大家更好的理解举了这么个例子: 假如有一栋教学楼,刚好你今天在这栋楼的某一个课室上课,已知这栋楼有50个…...
添加currentSchema后,该模式下表报不存在(APP)
文章目录 环境文档用途详细信息相关文档 环境 系统平台:Linux x86-64 Red Hat Enterprise Linux 7 版本:4.5.7 文档用途 解决程序URL添加currentSchema后,访问该模式下的表,报错信息com.highgo.jdbc.util.PSQLException: ERROR…...
Python数据整合与转换全攻略
在大数据时代,企业平均使用16个不同数据源,但数据利用率不足30%。数据整合与转换能力已成为数据工程师的核心竞争力。本文将通过电商订单数据整合实战,系统讲解Python数据整合与转换的核心技术栈。 一、数据整合的三大挑战与应对策略 1. 数…...
ArcGIS操作16:添加经纬网
1、单击视图 > 数据框属性 2、单击格网选项卡 > 新建格网按钮 3、创建经纬网 4、经纬网标注间隔需要自己多次尝试,选择一个合适的值,这里江苏省选择50 5、继续设置合适的参数 6、点击应用,预览是否合适(不合适再新建一个经…...
BioID技术:探索蛋白质相互作用的新方法
在细胞的复杂环境中,蛋白质并非孤立地执行其功能,而是通过与其他蛋白质相互协作来完成各种生物学过程。理解蛋白质相互作用网络对于揭示细胞机制和疾病发生发展具有至关重要的意义。近年来,一种名为BioID(Biotin Identification&a…...
Java 大视界——Java大数据在智慧交通智能停车诱导系统中的数据融合与实时更新
智慧交通的快速发展对城市停车资源的高效利用提出了更高要求,而智能停车诱导系统作为缓解“停车难”问题的核心手段,亟需解决多源数据融合、实时状态更新及高并发访问等挑战。Java凭借其稳定的大数据生态、卓越的实时计算能力及跨平台兼容性,…...
【Redisson】快速实现分布式锁
大家好,我是jstart千语。之前给大家分享过使用redis的set nx ex命令实现分布式锁。但手动的实现方式不仅麻烦,而且不好管理。实现出来的锁也是不可重入的,不可重试的。那么在要求比较高的系统中,就不太适用了。虽然说重入问题可以…...
内核常见面试问题汇总
1、Linux 中主要有哪几种内核锁?它们各自的特点和适用场景是什么? 自旋锁 自旋锁是一种忙等待锁,当一个线程试图获取一个被占用的自旋锁时,他会一直循环在那里,不断地检查锁是否可用,而不会进入睡眠状态。 自旋锁的优点这是在锁被持有的时间很短的情况下,性能非常高,…...
laravel中如何使用Validator::make定义一个变量是 ,必传的,json格式字符串
在 Laravel 中,使用 Validator::make 定义一个变量为必传且为JSON 格式字符串时,可以通过以下方式实现: use Illuminate\Support\Facades\Validator;$validator Validator::make($request->all(), [your_field > required|json, // 必…...
【全解析】EN18031标准下的NMM网络监控机制
上一篇文章我们了解了RLM机制如何为设备抵御DoS攻击保驾护航,今天我们将目光转向 EN18031 标准中的另一个重要防线——NMM(Network Monitoring Mechanism)网络监控机制。 NMM - 1规定,如果设备是网络设备,应提供网络监…...
浏览器开发随笔
浏览器多进程架构(Chrome) ----------------------------- | Browser Process | |-----------------------------| | UI 线程、主控、导航、安全策略 | -----------------------------| | |↓ ↓ ↓ -------…...
漏洞类型与攻击技术
1.1 SQL注入 1.1.1 SQL注入简介与原理 SQL注入是通过用户输入的数据中插入恶意SQL代码,绕过应用程序对数据库的合法操作,进而窃取、篡改或删除数据的攻击方式。核心原理是应用程序未对用户输入进行严格过滤,导致攻击者可以操控SQL语句逻辑。 1.1.2 联合查询注入与报…...
day018-磁盘管理-案例
文章目录 1. 磁盘分区1.1 手动磁盘分区1.2 重装系统,保留分区1.2.1 选择从光盘启动1.2.2 保留系统盘分区1.2.3 挂载数据盘 2. 物理服务器使用流程3. swap3.1 增加swap3.2 关闭swap 4. 故障案例(红帽类系统)4.1 root密码忘记,重新设…...
spark调度系统核心组件SparkContext、DAGSchedul、TaskScheduler介绍
目录 1. SparkContext2.DAGScheduler3. TaskScheduler4. 协作关系Spark调度系统的核心组件主要有SparkContext、DAGScheduler和TaskScheduler SparkContext介绍 1. SparkContext 1、资源申请: SparkContext是Spark应用程序与集群管理器(如Standalone模式下的Master、Yarn模…...
python数据可视化第三章数值计算基础
numpy库 数组创建 import numpy as np #创建n维数组array a np.array([1, 2, 3]) b np.array([4, 5, 6]) #可以直接运算 print(a 1) # [2 3 4] print(ab) # [5 7 9] #数组的维度:ndim print(a.ndim) #1 #数组的形状:shape print(a.shape) #(3,) 一维…...
std::chrono类的简单使用实例及分析
author: hjjdebug date: 2025年 05月 20日 星期二 14:36:17 CST descrip: std::chrono类的简单使用实例及分析 文章目录 1.实例代码:2. 代码分析:2.1 auto t1 std::chrono::high_resolution_clock::now();2.1.1 什么是 system_clock2.1.2 什么是 chrono::time_point?2.1.3 什…...
MongoDB 学习(三)Redis 与 MongoDB 的区别
目录 一、NoSQL 数据库与关系型数据库的优缺点二、Redis 与 MongoDB 的区别 MongoDB 和 Redis 都是 NoSQL 数据库,采用 结构型数据存储,而非 MySQL、Oracle 等则属于传统的 关系型数据库。 一、NoSQL 数据库与关系型数据库的优缺点 关系型数据库&#…...
Java双指针法:原地移除数组元素
Java双指针法:原地移除数组元素 代码解析关键点示例特点 代码解析 class Solution {public int removeElement(int[] nums, int val) {int cur 0; // 初始化一个指针 cur,表示新数组的当前写入位置for (int i 0; i < nums.length; i) { // 遍历原数…...
第二届帕鲁杯时空交织的密语
题目描述: 我们在暗网服务器中发现了一个神秘文件,据说是某个黑客组织的「时空密钥」,文件内容似乎由大量时间戳构成。情报显示,只有将时间维度与二进制低语结合才能解开秘密。线索隐藏在时空的起点与终点之间。 解压得到timestr…...
【神经网络与深度学习】扩散模型之原理解释
引言: 在人工智能的生成领域,扩散模型(Diffusion Model)是一项极具突破性的技术。它不仅能够生成高质量的图像,还可以应用于音频、3D建模等领域。扩散模型的核心思想来源于物理扩散现象,其工作方式类似于从…...
Map更简洁的编码构建
Map的链式构建需求 jdk1.8,编码时需要手动构建一个Map 传统Map构建方式 - 声明列表,依次添加元素; - 利用匿名内部类 实例初始化块,比较简洁声明并添加元素 //1 先声明创建 Map<String, Object> createMap new HashMap&…...
深挖navigator.webdriver浏览器自动化检测的底层分析
本文将带你深入探索并实践如何从底层层面破解浏览器 navigator.webdriver 检测,结合爬虫代理等策略伪装、多线程加速等技术,在豆瓣图书搜索页面上批量采集图书评分、简介、作者等信息。文章面向初学者,采用分步教程型结构,并增设「…...
业务流程和数据结构之间如何对应
业务流程和数据结构之间存在着紧密的对应关系,它们相互依赖、相互影响。以下是它们之间的对应关系以及如何进行对应: 1. 业务流程中的步骤与数据结构的记录 业务流程:业务流程是由一系列的步骤组成的,每个步骤都有明确的任务和目…...
浜掕仈缃戝ぇ鍘傞潰璇曪細璋㈤鏈虹殑鐖嗙瑧姹傝亴涔嬫梾
浜掕仈缃戝ぇ鍘傞潰璇曪細璋㈤鏈虹殑鐖嗙瑧姹傝亴涔嬫梾 绗竴杞細鍩虹鐭ヨ瘑杞扮偢 闈㈣瘯瀹�锛氭垜浠厛鑱婅亰Java鐨勫熀纭�鐭ヨ瘑锛岃阿椋炴満锛屼綘鑳借В閲婁竴涓婮ava涓殑HashMap鏄浣曞伐浣滅殑锛焅n 璋㈤鏈�锛氬摝…...
关于Linux服务器数字取证一
本次讲解apachemysql类型的基本类型 仿真 导入我们的检材 默认是仅主机模式,改成nat模式 查看ip地址 ip addr 修改虚拟机网卡配置 连通性测试 查找根目录 现在我们可以通过ip访问网站,但是网站处于关闭状态 接下来我们去查找配置文件,去…...
电商运营数据分析指南之流量指标
本文电商运营数据分析指南之流量指标主要面向电商行业新人,针对数据分析师/运营人员日常监控中的常见困惑提供解决方案。适合刚接触电商数据监控缺乏思路,或对电商数据指标感兴趣希望系统学习的读者。 电商数据分析如同航海指南针,精准的数据…...
C++初阶-迭代器失效和vector::insert函数的最终实现
目录 1.vector::insert函数 1.1问题分析 1.2vector::insert函数的最终实现 1.3vector::insert函数的分析 2.第二种迭代器失效 3.第三种迭代器失效 4.迭代器失效deepseek的回答 1. 迭代器失效的原因 2. 不同容器的迭代器失效情况 (1)std::vecto…...
DeepSeek的走红,会不会带动芯片市场新一轮增长?
在大模型竞赛如火如荼的今天,国产AI大模型DeepSeek的迅速走红,无疑为中国AI行业注入了新的活力。从技术突破到商业落地,DeepSeek不仅在技术圈引发了广泛关注,也让“AI大模型”这一关键词再次登上产业链的风口浪尖。但一个更值得深…...
小土堆pytorch--神经网路-卷积层池化层
神经网路-卷积层&池化层 一级目录二级目录三级目录 1. 神经网路-卷积层2. 神经网路最大池化的应用 一级目录 二级目录 三级目录 1. 神经网路-卷积层 在PyTorch中,torch.nn.Conv2d函数定义了一个二维卷积层,其常用参数包括: in_channel…...
什么叫生成式人工智能?职业技能的范式转移与能力重构
当人们谈论人工智能时,常常混淆其不同类型与功能。生成式人工智能作为AI领域的重要分支,其本质不在于分析或分类已有数据,而在于创造新的内容——无论是文本、图像、音乐还是代码。理解这一技术的内涵,不仅关乎技术认知࿰…...
集星獭 | 重塑集成体验:新版编排重构仿真电商订单数据入库
概要介绍 新版服务编排以可视化模式驱动电商订单入库流程升级,实现订单、客户、库存、发票、发货等环节的自动化处理。流程中通过循环节点、判断逻辑与数据查询的编排,完成了低代码构建业务逻辑,极大提升订单处理效率与业务响应速度。 背景…...
小白成长之路-Linux磁盘管理(一)
文章目录 前言一、磁盘介绍1、磁盘的物理结构1.1硬盘结构1.2磁头数、磁道、柱面、扇区 2.CHS编号2.1磁道编号规则2.3扇区编号规则2.3通过CHS计算硬盘容量 3、磁盘存储划分3.1第一个扇区存储的数据3.2硬盘分区 4.开机流程5、要点6、磁盘存储数据的形式 二、Linux文件系统1、根文…...
【Linux】第二十四章 管理网络安全
1. 防火墙在 Linux 系统安全中有哪些重要的作用? 防止未经授权的访问 网络流量过滤,常见过滤方式包括:基于 IP 地址、端口、协议类型(如 TCP、UDP)、源和目标地址等。限制流量速率、阻止来自单个IP或多个IP的高频请求保…...
【解决】SSH 远程失败之路由配置问题
开发平台:RedHat 8 一、问题描述 使用 WindTerm SSH 远程连接 192.168.88.211 虚拟主机,无法连接。 二、问题追溯 VMWare 虚拟机配置 虚拟网卡IPVMNet 模式应用网卡1(eth0)192.168.88.11/24VMNet 8服务网卡2(…...
中级网络工程师知识点9
1.在Linux中,负责配置DNS的文件是/etc/resolv.conf,包含了主机的域名搜索顺序和DNS服务器的地址 2.主域名服务器在接收到域名请求后,首先查询的是本地缓存 3.自动专用地址:169.254.X.X/16 4.FTP默认20端口,传输文件…...
网页前端开发(基础)
前端开发三件客:HTML,CSS,JavaScript。 web标准,也称网页标准,由3个组成部分。1.HTML,管理页面的元素和内容。2.CSS,负责网页的表现(页面元素的外观,位置等页面样式。如:…...
Git命令使用全攻略:从创建分支到合并的完整流程
Git命令使用全攻略:从创建分支到合并的完整流程 引言一、初始化项目与基础配置1.1 克隆远程仓库1.2 查看当前分支状态 二、创建与管理分支2.1 从main分支创建新功能分支2.2 查看分支列表2.3 提交代码到新分支2.4 推送分支到GitHub 三、版本发布与标签管理3.1 创建轻…...
边缘智能与量子计算双轮驱动:IVX 开启实时 AI 开发新维度
一、技术跃迁:量子化组件架构如何颠覆传统 AI 开发流程 在传统 AI 开发范式中,将 GPT-4o、Mediapipe 等模型集成到业务系统需要经历 "模型训练 - API 对接 - 前端适配" 的三重技术壁垒。开发团队需同时掌握 TensorFlow、Flask、React 等技术栈…...
对冲策略加仓止损盈思路
外汇交易中的对冲策略,重点在于加仓和盈利出局的策略。该策略通过多种方法来管理头寸,旨在最大化盈利并控制风险。 加仓策略 金字塔加仓法 金字塔加仓法是一种逐步增加头寸的方法。在初始头寸盈利后,以较小的手数逐步增加头寸。这种方法可以在…...
ERP生产环境索引重建:高风险操作还是性能良药?何时动手,如何操刀?
ERP系统是企业运营的核心,其数据库性能至关重要。索引作为提升查询效率的关键,其维护(尤其是重建)操作却常常让DBA和运维工程师们如履薄冰。本文将深入探讨在生产ERP环境中重建索引的潜在风险、必要性评估、最佳实践以及不同数据库的注意事项,旨在帮助技术人员做出明智决策…...
PyTorch 之 torch.distributions.Categorical 详解
PyTorch 之 torch.distributions.Categorical 详解 PyTorch 之 torch.distributions.Categorical 详解一、创建分类分布(一)基本语法(二)示例 二、采样(一)方法(二)示例 三、计算概率…...
杰发科技AC7840——如何把结构体数据写到Dflash中
1. 结构体数据被存放在Pflash中 正常情况下,可以看到全局变量的结构体数据被存放在Pflash中 数字部分存在RAM中 2. 最小编程单位 8字节编程,因此如果结构体存放在Dfalsh中,进行写操作,需要写8字节的倍数 第一种办法:…...
vue路由小案例
vue路由小案例 案例需求案例实现小结 案例需求 创建二级路由,掌握嵌套路由点击内容,根据不同id实现页面的跳转,掌握传参方式利用routerlink标签封装的类,实现高亮实现重定向,自动跳转到二级页面 案例实现 ÿ…...