自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 收藏
  • 关注

原创 如何画技术架构图?

逻辑视图(Logical View)进程视图(Process View)物理视图(Physical View)开发视图(Development View)场景视图(Scenarios View)运行架构‍‍。

2024-07-30 22:49:52 1434

原创 Java 基础-语法-运算符

种类举例作用算术运算符​​:加法​:减法​:乘法​:除法​:取模(取余数)用于执行基本的数学运算增量运算符​++​:递增--​:递减用于递增或递减变量的值赋值运算符​​:赋值+=​:加法赋值-=​:减法赋值*=​:乘法赋值/=​:除法赋值%=​:取模赋值用于给变量赋值比较运算符​==​:等于!​:不等于​:小于​:大于<=​:小于或等于>=​:大于或等于用于比较两个值逻辑运算符​&&​:逻辑与(短路与)||​:逻辑或(短路或)!​:逻辑非用于执行逻辑运算位运算符​​:按位与​:按位或。

2024-07-11 22:35:44 1036

原创 Redis实践

尤其是针对Redis这种高性能的内存数据库来说,如果Redis中的内存被换到磁盘上,对于Redis这种性能极其敏感的数据库,这个操作时间是无法接受的。另外,fork的耗时也与系统有关,如果把Redis部署在虚拟机上,那么这个时间也会增大。需要注意的是当我们在线上实例进行大key扫描时,Redis的QPS会突增,为了降低扫描过程中对Redis的影响,我们需要控制扫描的频率,使用。你需要检查你的业务代码,是否存在写入大key的情况,需要评估写入数据量的大小,业务层应该避免一个key存入过大的数据量。

2024-07-09 22:55:53 1047

原创 Redis 集群模式

这里SentinelSentinelRedisSentinelSentinel。

2024-07-09 22:50:50 995

原创 Redis持久化机制

这意味着写入操作是同步进行的,由主服务器线程直接控制,这提供了最高的数据安全性,但可能会影响到Redis的性能,因为它等待磁盘I/O完成。​中的内容写入磁盘一次。在这个模式下,写入操作仍然是由主服务器线程触发,但是它使用了操作系统的页缓存机制,因此在大多数情况下,实际的磁盘I/O会在后台异步完成,不会显著影响Redis的响应时间。aof文件是一个二进制文件,并不是像上面的例子一样,直接保存每个命令,而使用Redis自己的格式。​持久化方式,我们可以在配置文件中开启并进行更加详细的配置,如下面的。

2024-07-09 22:39:44 1885

原创 Redis 数据过期及淘汰策略

惰性删除、定期删除组合模式。

2024-07-09 22:25:43 365

原创 Redis基本数据结构

下图是执行​时,所涉及到的数据模型。dictEntry​Redis​是Key-Value​数据库,因此对每个键值对都会有一个dictEntry​,里面存储了指向Key​和Value​的指针;next​指向下一个dictEntry​,与本Key-Value​无关。`` ``}v;Key图中右上角可见,​并不是直接以字符串存储,而是存储在SDS​结构中。​​既不是直接以字符串存储,也不是像Key​一样直接存储在SDS​中,而是存储在​中。实际上,不论Value​是5种类型的哪一种,都是通过​来存储的;而。

2024-07-09 22:23:10 827

原创 大厂实践 - 美团: MySQL索引原理及慢查询优化

我们知道一般的应用系统,读写比例在 10:1 左右,而且插入操作和一般的更新操作很少出现性能问题,遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,所以查询语句的优化显然是重中之重。大致执行过程是:mysql 先按索引排序得到前 10 条记录,然后再去 join 过滤,当发现不够 10 条的时候,再次去 10 条,再次 join,这显然在内层 join 过滤的数据非常多的时候,将是灾难的,极端情况,内层一条数据都找不到,mysql 还傻乎乎的每次取 10 条,几乎遍历了这个数据表!

2024-07-02 23:16:33 950

原创 MySQL 深入了解索引B+树

InnoDB 的数据是按「数据页」为单位来读写的,默认数据页大小为 16 KB。每个数据页之间通过双向链表的形式组织起来,物理上不连续,但是逻辑上连续。数据页内包含用户记录,每个记录之间用单向链表的方式组织起来,为了加快在数据页内高效查询记录,设计了一个页目录,页目录存储各个槽(分组),且主键值是有序的,于是可以通过二分查找法的方式进行检索从而提高效率。为了高效查询记录所在的数据页,InnoDB 采用 b+ 树作为索引,每个节点都是一个数据页。

2024-07-02 22:49:17 283

原创 MySQL 深入理解Buffer Pool

先来说说 MySQL 的预读机制。程序是有空间局部性的,靠近当前被访问数据的数据,在未来很大概率会被访问到。所以,MySQL 在加载数据页时,会提前把它相邻的数据页一并加载进来,目的是为了减少磁盘 IO。但是可能这些被提前加载进来的数据页,并没有被访问,相当于这个预读是白做了,这个就是预读失效。如果使用简单的 LRU 算法,就会把预读页放到 LRU 链表头部,而当 Buffer Pool空间不够的时候,还需要把末尾的页淘汰掉。

2024-07-01 23:06:38 620

原创 MySQL行数存储方式

MySQL 的 Compact 行格式中会用「NULL值列表」来标记值为 NULL 的列,NULL 值并不会存储在行格式中的真实数据部分。NULL值列表会占用 1 字节空间,当表中所有字段都定义成 NOT NULL,行格式中就不会有 NULL值列表,这样可节省 1 字节的空间。

2024-07-01 22:44:44 966

原创 MySQL EXPLAIN 完全解读

MySQL EXPLAIN 完全解读Explain 命令在解决数据库性能上是第一推荐使用命令,大部分的性能问题可以通过此命令来简单的解决,Explain 可以用来查看 SQL 语句的执行效 果,可以帮助选择更好的索引和优化查询语句,写出更好的优化语句。‍命令使用explain 可用来分析 SQL 的执行计划,格式如下:{EXPLAIN | DESCRIBE | DESC} tbl_name [col_name | wild]{EXPLAIN | DESCRIBE | DESC}

2024-06-27 23:32:33 1028

原创 MySQL 详解SELECT查询流程

与客户端进行 TCP 三次握手建立连接;校验客户端的用户名和密码,如果用户名或密码不对,则会报错;如果用户名和密码都对了,会读取该用户的权限,然后后面的权限逻辑判断都基于此时读取到的权限;执行一条 SQL 查询语句,期间发生了什么?连接器:建立连接,管理连接、校验用户身份;查询缓存:查询语句如果命中查询缓存则直接返回,否则继续往下执行。MySQL 8.0 已删除该模块;解析 SQL,通过解析器对 SQL 查询语句进行词法分析、语法分析,然后构建语法树,方便后续模块读取表名、字段、语句类型;

2024-06-27 23:08:19 860

原创 MySQL深入浅出MVCC实现原理

​Read View​就是事务进行快照读操作的时候生产的读视图(Read View),在该事务执行的快照读的那一刻,会生成数据库系统当前的一个快照,记录并维护系统当前活跃事务的 ID(当每个事务开启时,都会被分配一个 ID, 这个 ID 是递增的,所以最新的事务,ID 值越大)。​Read View​遵循一个可见性算法,主要是将要被修改的数据的最新记录中的DB_TRX_ID​(即当前事务ID​)取出来,与系统当前其他活跃事务的ID​去对比(由Read View​维护),如果DB_TRX_ID​跟。

2024-06-26 23:18:42 1616

原创 MySQL事务的实现原理

事务广泛的运用于订单系统、银行系统等多种场景。如果有以下一个场景:A 用户和 B 用户是银行的储户。现在 A 要给 B 转账 500 元。检查 A 的账户余额 >500 元;A 账户扣除 500 元;B 账户增加 500 元;正常的流程走下来,A账户扣了500,B账户加了500,皆大欢喜。那如果A账户扣了钱之后,系统出故障了呢?A白白损失了500,而B也没有收到本该属于他的500。以上的案例中,隐藏着一个前提条件:A扣钱和B加钱,要么同时成功,要么同时失败。事务的需求就在于此。

2024-06-26 23:14:32 792

原创 MySQL深入理解乐观锁与悲观锁

在关系数据库管理系统里,乐观并发控制(又名“乐观锁”,Optimistic Concurrency Control,缩写“OCC”)是一种并发控制的方法。它假设多用户并发的事务在处理时不会彼此互相影响,各事务能够在不产生锁的情况下处理各自影响的那部分数据。在提交数据更新之前,每个事务会先检查在该事务读取数据后,有没有其他事务又修改了该数据。如果其他事务有更新的话,正在提交的事务会进行回滚。乐观事务控制最早是由孔祥重(H.T.Kung)教授提出。

2024-06-26 23:10:35 562

原创 MySQL 锁机制

共享/排它锁(Shared and Exclusive Locks)意向锁(Intention Locks)记录锁(Record Locks)间隙锁(Gap Locks)临键锁(Next-key Locks)插入意向锁(Insert Intention Locks)自增锁(Auto-inc Locks)MySQL的InnoDB存储引擎构建了一套精密的锁机制,巧妙地平衡了数据一致性与高并发处理的需求。

2024-06-26 23:02:05 875 1

原创 InnoDB一棵B+树可以存放多少行数据?

lineitem 表的数据行数为 600 多万,B+ 树高度为 3,customer 表数据行数只有 15 万,B+ 树高度也为 3。可以看出尽管数据量差异较大,这两个表树的高度都是 3,换句话说这两个表通过索引查询效率并没有太大差异,因为都只需要做 3 次 IO。那么如果有一张表行数是一千万,那么他的 B+ 树高度依旧是 3,查询效率仍然不会相差太大。region 表只有 5 行数据, B+ 树高度为 1。‍‍。

2024-06-25 23:30:38 1017

原创 MySQL索引深入浅出

与其他数据库例如 Oracle 和 SQL Server 等数据库中只有一种存储引擎不同的是,MySQL 有一个被称为“Pluggable Storage Engine Architecture”(可替换存储引擎架构)的特性,也就意味着 MySQL 数据库提供了多种存储引擎。用户可以根据不同的需求为数据表选择不同的存储引擎,用户也可以根据自己的需要编写自己的存储引擎。

2024-06-25 23:04:47 696

原创 Java 基础-语法-数据类型

​ Java 语言中的数据类型分为两大类,分别是基本类型和引用类型。程序中需要处理许多数据,对于不同数据都有其对应的数据类型,其实就是在内存中开辟一个存储空间来存放数据,不同数据所开辟的内存大小也会不一样。‍。

2024-05-07 19:46:28 1869 1

原创 Java 基础-语法-关键字

‍。

2024-04-30 16:29:03 281 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除