青云博客 记录、分享

一个 Redis 实例最多能存放多少的 keys

Redis实例最多可以存放的keys数量受到多个因素的限制,包括Redis版本、可用内存大小、系统架构和其他配置参数等。 根据Redis的设计和实现,它的keys存储在一个由Hashtable组成的hash表中。根据Redis的源代码,目前Redis默认使用了214个哈希表槽位(默认情况下,可以通过

詹学伟 Published on 2024-04-24

Redis 主从同步

在Redis中,主从同步是通过以下步骤来实现的: 建立连接:从服务器(从节点)通过向主服务器(主节点)发送SYNC命令来与主服务器建立连接。 快照同步:主服务器在收到SYNC命令后,会执行BGSAVE命令生成一个RDB持久化文件,并将该文件发送给从服务器进行全量复制。从服务器在接收到RDB文件后,会

詹学伟 Published on 2024-04-24

索引失效的情况

索引失效是指当使用索引进行查询时,索引无法发挥作用,导致查询性能下降。以下是一些常见的索引失效情况: 不适合的索引类型:选择不适合查询条件的索引类型,例如使用全文索引进行精确匹配查询,或者使用B树索引进行模糊匹配查询。 使用函数或表达式:在查询条件中使用函数或表达式会导致索引失效,因为索引无法利用计

詹学伟 Published on 2024-04-24

如何定位慢 SQL?

要定位慢SQL产生的原因,可以通过以下几个步骤进行排查: 使用MySQL的查询日志:可以在MySQL的配置文件中启用查询日志(query log)。启用查询日志后,MySQL会记录下执行的所有SQL语句和执行时间。通过分析查询日志,可以找到执行时间较长的SQL语句。 使用EXPLAIN分析执行计划:

詹学伟 Published on 2024-04-24

MySQL 索引底层结构为什么使用 B+树

MySQL索引底层结构使用B+树的主要原因有以下几点: 能够支持快速的查找:B+树是一种平衡多路查找树,树的高度相对较低,能够快速定位到目标数据。在具有大量数据的情况下,B+树的查找效率更高。 有序性:B+树的特点是节点上的键值是有序排列的,这使得在范围查询、排序和分组等操作中效率更高。对于MySQ

詹学伟 Published on 2024-04-24

Mysql是如何回滚事务的

MySQL使用了Undo Log(回滚日志)来实现事务的回滚操作。当一个事务需要回滚时,MySQL会根据事务的Undo Log来撤销对数据库的修改操作,将数据恢复到事务开始之前的状态。 具体的回滚过程如下: 事务回滚触发:当事务发生异常、被显式回滚或者被外部终止时,MySQL会触发事务的回滚操作。

詹学伟 Published on 2024-04-24

MVCC 底层原理

MVCC(Multi-Version Concurrency Control),即多版本并发控制,是一种数据库的并发控制机制。它的目标是在保证数据一致性和隔离性的同时,提供更好的并发性能。 MVCC的底层原理如下: 每一行数据都有多个版本:在MVCC中,每个数据行都会维护多个版本。每当对一行数据进行

詹学伟 Published on 2024-04-24

LRU 实现原理

LRU(Least Recently Used)是一种常见的缓存淘汰策略,它的基本思想是根据数据的访问时间来淘汰最近最少使用的数据。当缓存满了的时候,会将最近最少访问的数据从缓存中删除,以腾出空间给新的数据。 在实现上,可以通过维护一个数据结构来记录数据的访问顺序,常用的数据结构是双向链表(Doub

詹学伟 Published on 2024-04-24

MySQL 为什么 InnoDB 是默认引擎

MySQL中的InnoDB引擎是默认引擎,主要基于以下几个原因: 事务支持:InnoDB是MySQL唯一一个提供事务支持的引擎。事务是一组操作的集合,要么全部成功,要么全部失败,确保数据的一致性和可靠性。对于具有高并发读写需求的应用,如电子商务、银行等,事务的支持是非常重要的。 锁机制:InnoDB

詹学伟 Published on 2024-04-24

缓存穿透、缓存击穿和缓存雪崩

缓存穿透、缓存击穿和缓存雪崩是在使用缓存时常见的性能问题。 缓存穿透指的是恶意查询一个不存在的数据,导致该请求每次都会穿透缓存,直接访问数据库。这种情况下,大量请求会直接访问数据库,给数据库造成压力,降低了系统性能。 解决办法: 使用布隆过滤器:将所有可能存在的数据放入布隆过滤器中,对请求进行过滤,

詹学伟 Published on 2024-04-24
Previous Next