- 博客(44)
- 收藏
- 关注
原创 SakuraCat(2)Endpoint
对于每个socket连接,服务器通过一个新的线程来处理请求,让服务器具有并发处理请求的能力。(后续将会优化成线程池)
2025-03-30 15:32:46
397
原创 libilibi项目优化(2)视频文件分块上传
整个文件分片上传过程通过预上传生成唯一的上传 ID 和文件信息,分片上传将每个分片存储到指定路径并更新上传进度,最后通过获取已上传分块信息接口返回前端已上传的分片信息。整个过程利用 Redis 存储文件信息,确保上传过程的高效和可靠。优化后的代码在功能上较为完善,支持断点续传、完整性校验和资源清理等功能,但在处理大规模数据、并发上传和异常情况时仍存在一些不足。在实际应用中,可以根据具体需求和场景进一步优化和改进。
2025-03-18 20:49:15
1032
原创 MySQL学习笔记(4)三大日志
Undo Log(回滚日志)是InnoDB存储引擎中的一种逻辑日志,主要用于实现事务的原子性和隔离性。它记录了事务在修改数据前的原始状态,以便在事务回滚或数据库崩溃时能够恢复数据到原始状态。此外,Undo Log还用于实现多版本并发控制(MVCC),帮助实现隔离性。Undo Log和Redo Log在InnoDB存储引擎中扮演着不同的角色,共同协作以确保数据的完整性和一致性。Undo Log侧重于事务的原子性和隔离性,通过记录修改前的数据实现事务回滚和MVCC;
2025-03-13 10:33:01
686
原创 MySQL学习笔记(3)InnoDB存储引擎对MVCC的实现
MVCC(Multi-Version Concurrecy Control) 多版本并发控制MVCC 是一种并发控制机制,用于在多个并发事务同时读写数据库时保持数据的一致性和隔离性。它是通过在每个数据行上维护多个版本的数据来实现的。当一个事务要对数据库中的数据进行修改时,MVCC 会为该事务创建一个数据快照,而不是直接修改实际的数据行。
2025-03-06 11:00:49
1130
原创 libilibi项目优化(1)使用Redis实现缓存
用户点赞、收藏使用在进行更新视频点赞、收藏数量等信息时,并非直接修改数据库,而是先修改缓存中的数据,再利用消息队列,或定时任务等方式,将缓存中的数据更新到数据库使用定时任务同步缓存与数据库在你的第一版实现中,已经很好地结合了旁路缓存(视频基本信息)和异步写入缓存(点赞、收藏、播放量等高频修改信息)。以下是对你现有实现的分析和进一步优化的建议,以确保数据一致性和系统的高效性。旁路缓存模式:异步写入缓存:定时任务同步:在旁路缓存模式下,如果视频信息不存在,每次请求都会直接查询数据库,可能导致数据库压力过
2025-03-05 11:05:17
1288
原创 MySQL学习笔记(2)并发问题与事务隔离级别
本文参考:https://javaguide.cn/database/mysql/transaction-isolation-level.html。
2025-03-03 19:57:48
704
原创 MySQL学习笔记(1)索引
本文参考:https://javaguide.cn/database/mysql/mysql-index.html。
2025-03-01 16:24:42
392
原创 适配器模式概述
适配器模式(Adapter Pattern)是一种结构型设计模式,其核心目的是通过提供一个适配器类来使得原本接口不兼容的类可以一起工作。它通过将一个类的接口转换成客户端所期望的接口,使得原本因接口不兼容而无法一起工作的类可以协同工作。适配器模式是一种结构型设计模式,允许将一个类的接口转换成客户希望的另一个接口,从而解决由于接口不兼容而导致的类无法协同工作的难题。适配器类需要实现统一接口:使得能与一样,通过接口来播放音频文件,客户端代码不会因为使用了不同类型的播放器而发生变化。遵循适配器模式的原则。
2024-12-27 20:36:54
773
原创 libilibi项目总结(18)FFmpeg 的使用
这段代码封装了一些FFmpeg工具的常用操作,如生成视频缩略图、转换视频格式、获取视频编码信息、将视频分割成.ts文件等。每个方法都通过执行外部命令,调用FFmpeg和FFprobe工具来完成相应的功能。appConfig用于控制FFmpeg命令的日志输出等配置。通过方法,Spring Boot 后端应用可以在运行时启动一个外部进程(如 FFmpeg),执行视频转换或其他处理任务。命令执行过程中产生的标准输出和错误输出流会被独立的线程读取并保存,最后将执行结果返回给调用者。为了保证系统的稳定性,还通过。
2024-12-18 20:05:06
1368
原创 Spring整合Redis基本操作步骤
添加依赖首先,在pom.xml文件中添加必要的 Maven 依赖。Redis 相关的依赖包括 Spring Boot 的 Redis 启动器和fastjson-- Fastjson (用于 JSON 序列化和反序列化) --> < dependency > < groupId > com.alibaba < artifactId > fastjson
2024-12-18 19:20:45
554
原创 Spring Boot中Bean的 构造器注入、字段注入和方法注入
注入方式适用场景优点缺点构造器注入依赖关系不可变,且依赖为必需的情况强制依赖、易于测试、不可变性参数较多时不易读,灵活性差字段注入简单、快速的注入,依赖可选或不复杂的情况简单、代码简洁、实现快速不易测试、依赖关系不明确、耦合度高方法注入依赖关系可变,依赖为可选的情况适合依赖可变、Setter可重复调用依赖关系不明确、可能导致空指针异常对于必需依赖,推荐使用构造器注入,因为它强制要求依赖关系的明确性并且不可变。对于可选依赖,或者在需要某种后期注入的情况下,可以使用Setter方法注入。
2024-12-17 20:09:14
1258
原创 libilibi项目总结(17)Elasticsearch 的使用
这段代码定义了一个类,主要用于与 Elasticsearch 进行交互,执行一些基本的操作,如创建索引、保存、更新和删除文档,及搜索操作。
2024-12-17 19:57:41
1001
原创 libilibi项目总结(16)数据统计、查询
统计数据从Redis中获取并结合数据库中的视频信息,生成统计结果,并最终存入数据库表中。这些数据可以用于后续的分析、展示或其他业务需求。
2024-12-17 10:22:00
1001
原创 RabbitMQ三种交换机的基本使用方法
是最常见的交换机类型,它根据消息的(路由键)将消息路由到一个或多个匹配的队列。如果队列绑定时指定了特定的路由键,那么只有生产者发送的消息的路由键与该队列绑定的路由键完全匹配时,消息才会被路由到该队列。将接收到的消息广播到所有绑定到该交换机的队列,而不关心消息的路由键。它不会使用路由键,而是将消息发给所有的消费者队列。允许根据中的部分匹配规则来路由消息。它支持更灵活的消息路由,可以使用通配符(和)来匹配多个路由键。:匹配一个词:匹配零个或多个词。
2024-12-15 10:38:58
522
原创 libilibi项目总结(15)消息管理和播放历史
在播放视频时,要先获取改视频文件的对应的M3U8文件,此时将播放记录信息加入消息队列,进行异步写入数据库。
2024-12-15 10:20:27
194
原创 Spring中的单例多线程与ExecutorService的结合
在 Spring 中,单例模式保证了一个 Bean 在整个应用生命周期内只有一个实例,而多线程则允许多个线程并发执行任务。单例 Bean 被多个线程访问时,如果不小心处理线程安全问题,可能会导致并发问题。
2024-12-13 09:56:06
794
原创 libilibi项目总结(14)AOP校验登录和记录消息
这部分代码的核心是通过反射获取方法上的注解,并根据注解的内容决定是否执行后续的操作(如登录校验)。这种方法使得我们可以灵活地对需要登录校验的接口方法进行拦截,而不需要在每个方法中重复编写登录验证逻辑,只需在方法上添加注解即可。: 获取当前连接点(即被拦截的方法)的签名信息。Signature的子接口,提供了关于方法签名的更多细节。: 使用反射检查目标方法是否标记了注解。如果没有该注解,直接返回,不做处理。拦截标记了注解的方法。如果注解中的checkLogin属性为true,则进行登录校验。
2024-12-12 21:42:25
791
1
原创 RabbitMQ 基本使用方法详解
在 RabbitMQ 中,队列用于存储消息,直到消费者从队列中取出。队列是消息传递的基础。@Bean// durable 确保队列持久化:创建一个名为的队列,true表示该队列是持久化的,即 RabbitMQ 会在服务器重启后保留队列。交换机(Exchange)负责接收来自生产者的消息,并根据队列绑定的规则将消息路由到相应的队列。RabbitMQ 支持不同类型的交换机(如DirectFanoutTopic等),在这个例子中使用的是。@Bean// durable,是否持久化:创建一个名为。
2024-12-11 21:31:23
1343
原创 libilibi项目总结(13)异步视频转码和播放数量统计
接下来,我们定义 RabbitMQ 的队列、交换机和路由。通常使用注解的配置类来定义这些组件。// 队列定义@Bean// durable 确保队列持久化@Bean// Direct 类型交换机@Bean// durable,是否持久化// 队列和交换机的绑定@Bean@Bean通过上述步骤,你可以使用 RabbitMQ 替换 Redis 实现消息队列功能。RabbitMQ 提供了更多的特性(如消息确认、消息持久化、交换机路由等),非常适合处理需要高可靠性和高复杂性的消息传递场景。
2024-12-11 19:23:53
768
原创 libilibi项目总结(12)创作中心
主线程返回响应:主线程在调用后,会继续执行并尽快返回响应给客户端。这是因为不会阻塞当前线程,它将任务交给后台线程池管理。后台任务:后台任务由线程池中的一个线程处理,它们执行删除视频文件、数据库记录等清理工作,但这些操作在主线程返回响应后才开始执行,并且不会影响主线程的响应速度。因此,调用后,主线程不再等待后台任务完成,而是立即返回响应给客户端。后台任务在后台独立执行。
2024-12-11 09:52:45
776
原创 libilibi项目总结(11)视频系类
此SQL查询语句通过一个嵌套的查询,首先选择了与用户相关的视频系列信息,然后通过左连接将每个视频系列的第一个视频的封面信息添加到结果中,最终返回这些数据按排序字段(sort)排序的结果。映射了类,并通过进行嵌套查询,获取视频系列下的多个视频信息。主查询和子查询结合,使用 MyBatis 的标签动态查询与每个视频系列相关的视频列表,并将结果映射到 Java 对象中。
2024-12-10 22:28:52
1106
原创 libilibi项目总结(2)admin端分类管理
int NOT NULL AUTO_INCREMENT COMMENT ‘自增分类ID’,varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ‘分类编码’,varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT ‘分类名称’,int NOT NULL COMMENT ‘父级分类ID’,icon。
2024-11-26 11:20:15
309
原创 libilibi项目总结(1)登录注册
varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT ‘出生日期’,varchar(150) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT ‘学校’,tinyint(1) NOT NULL DEFAULT ‘1’ COMMENT ‘0:禁用 1:正常’,
2024-11-25 22:06:40
839
原创 Spring纯注解开发基本使用方法
1.使用@Component定义bean,括号中可以指的bean的名称。2.在配置文件中配置需要扫描的目录。三个衍生注解,分别定义表现层,业务层和数据层bean的定义。
2024-09-07 11:12:47
319
原创 spring利用properties文件进行数据源对象管理
复制xml文件中的语句,并把bean改成context。用location指定配置文件。
2024-09-05 16:36:46
236
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人