ACID(原子性、一致性、隔离性、持久性)是关系型数据库管理系统(RDBMS)的基石,它保证了事务的可靠性和数据的完整性。MySQL的InnoDB存储引擎通过一系列精巧的机制,完整地实现了这四大特性。本文将结合一些关键问题,深入剖析InnoDB是如何通过Undo Log、Redo Log、锁机制、MVCC以及其他辅助结构来实现ACID的。 一、一致性 (Consistency) 问:一致性是如何保证的? 一致性是ACID模型的最终目标,它要求事务必须使数据库从一个一致性状态转变到另一个一致性状态。这意味着事务执行的结果必须满足数据库的所有预设约束,如数据类型、非空约...
一、 事务并发带来的问题 当多个事务同时访问和修改共享数据时,如果没有有效的控制机制,可能会引发以下几种数据不一致的问题: 脏读 (Dirty Read): 定义: 一个事务读取到了另一个事务尚未提交的数据。 风险: 如果另一个事务最终回滚(Rollback),那么读取到的数据就是无效的“脏”数据。 不可重复读 (Non-Repeatable Read): 定义: 在同一个事务内,两次读取同一行数据,得到的结果却不一致。 ...
写项目的时候,发现自己的项目在后端服务重启后,登入状态会失效,一查配置发现sa-Token用的默认是UUID作为token,于是便着手修改为JWT。众所周知,JWT会记录信息,包括你是谁、你有什么权限、什么时候过期,理所当然的,我就认为换成JWT后,登入状态失效的问题就能得到解决。 在更换为JWT的过程中,我遇到了两个问题: 其一,是在application.yml里配置token-style为jwt后,前端收到的token依旧是UUID的问题。 这个是因为我为了实现权限管理,实现了StpInterface这个接口,这就导致“约定大于配置”被打破了,所以,我还需要通过注入 S...
前几天写我的开源项目时,发现一个bug,不能正确获取文件名,debug后才发现有一条DQL有问题: SELECT file_name FROM files WHERE file_id = #{fileId} AND webdav_path != 'deleted' LIMIT 1 乍一看没什么问题,就是把字段file_id为fileId且字段webdav_path 不为‘delete’的找到的第一行查询出来,但是我debug后,发现这条DQL语句并没有按照我预期的查到数据,问了...
前言 之前配置好的ss许久不用,今天一用不知道为什么寄了,客户端显示能够连接,服务端能够运行,但是没有连接成功的日志,试过取消CDN,但是依旧无法正常代理,遂作罢,投奔Hysteria。 NGINX占用端口 Hysteria获取证书用到的是Let’s Encrypt,要求服务器支持 ALPN 协议(Application-Layer Protocol Negotiation)并能正确响应 TLS 请求。 而我的日志出现了: Cannot negotiate ALPN protocol "acme-tls/1" for tls-alpn-01 challen...
最近好不容易刷到一个用Java写的、我感兴趣的项目,我fork了 https://github.com/wushuo894/ani-rss 这个项目,想着来学习一下大佬不用spring写的一个Java web,在调试过程中,我发现如果我的qBittorrent如果下载的种子没有人挂着,就会一直报错: 2024-12-28 22:41:15 ERROR ani.rss.task.RenameTask - 3c870c21a31ecc3343f01d1d90d45f45fcbe231f 磁力链接还在获取原数据中 java.lang.IllegalArgumentExcep...
我的屎山代码 在写tgDrive的初期,总是觉得怎么简单怎么来,结果就是后期的维护难受的一批。 请好好地,看着我的屎山(请勿展开,展开辣眼睛): //TODO: need refraction @Override public ResponseEntity downloadFile(String fileID) { try { // 从 botService 获取文件的下载路径和文...
问题发现 在写tgDrive的早期阶段,我想着一个小项目,应该不会有特别多的数据交互,我为了图方便,索性直接用Spring框架自带的ResponseEntity来响应,但是当项目进行下去后,我发现直接用ResponseEntity响应的话,前端的处理十分麻烦。 问题分析 在ResponseEntity构建的响应中,响应体的内容就只有数据,例如返回的JSON: { "name": "Alice", "age": 25 } 前端需要根据不同的...
在我费尽千辛万苦做好了老用户的丝滑迁移后(不是,第二天我就发现了新用户不能正确初始化数据库,不查不知道,一查吓一跳,原来 Flyway 优先于 schema.sql。 这也就是为什么会报错: SQL State : null Error Code : 1 Message : [SQLITE_ERROR] SQL error or missing database (no such table: files) Location : db/migration/V2__AddFullSizeColumn.sql (D:\project\tgDrive\target\nested...
学习计算机网络基础过程中的一些自己的思考,疑问和总结。 协议 在计算机网络中,我们所说的协议,指的是设备之间用来通信的规则和约定。就像人类交流需要共同的语言和规则(例如英语中的语法、句子结构),计算机在网络中互相通信也需要一种标准化的语言,这种语言就是协议。 协议的本质:共同的规则 假设你和别人通电话: 规则1:谁先说话? 电话接通后,通常是打电话的人先说“你好”。 规则2:如何回应? 接电话的人会说“你好,请问找谁?” 规则3:挂电话的顺序 通话结束时,通常会互相说再见,然后挂断。 ...