自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 怎么解决并发事务问题呢?MySQL的默认隔离级别是?

MySQL提供四种事务隔离级别解决并发问题:未提交读无法解决任何问题;读已提交仅解决脏读;可重复读(默认级别)解决脏读和不可重复读;串行化能解决所有问题但性能较低。不同级别在数据一致性和性能间提供不同权衡。

2026-01-10 08:53:25 185

原创 并发事务带来哪些问题?

并发事务中的三大问题:脏读指读取到其他事务未提交的"脏数据";不可重复读指同一事务内多次读取同一数据结果不一致;幻读指读取到其他事务新插入的"幻行"。这些问题都源于事务间的并发操作导致的数据不一致现象。

2026-01-09 14:55:09 157

原创 事务的特性是什么?可以详细说一下吗?

ACID特性定义了事务的四个关键原则:原子性确保事务完全执行或完全不执行;一致性保证数据状态正确转换;隔离性防止并发事务相互干扰;持久性确保提交的事务永久保存。以转账为例,500元要么完整转移,要么完全不转,且转账过程不受干扰,结果永久存储。这些特性共同保障了数据库事务的可靠性。

2026-01-02 08:48:54 81

原创 在使用索引的时候,是如何优化呢?

索引创建应遵循查询优化原则:选择高频查询字段,采用复合索引覆盖返回值,避免索引字段运算和类型转换,合理控制索引数量。

2026-01-01 09:46:03 102

原创 创建表的时候,你们是如何优化的呢?

本文介绍了创建数据表时的字段类型选择方法。参考《嵩山版》开发手册,针对不同数据类型选择相应字段类型:数值类采用TINYINT、INT、BIGINT等;字符串类选用CHAR、VARCHAR或TEXT。通过合理匹配字段内容与数据类型,确保数据库设计规范高效。

2025-12-31 16:09:50 78

原创 SQL的优化经验有哪些?

SQL优化方法包括:合理选择字段类型、建立有效索引、优化SQL语句(避免SELECT*、优先UNIONALL和INNERJOIN)、实施主从复制与读写分离,以及大数据量时采用分库分表策略。这些措施能显著提升数据库性能。

2025-12-29 16:57:24 61

原创 什么情况下索引会失效?

索引失效的常见原因包括:1)违反最左匹配原则;2)模糊查询时%在前置位置;3)对索引字段进行运算或类型转换;4)复合索引中范围查询阻断后续条件索引使用。这些情况都会导致数据库无法有效利用索引,影响查询性能。

2025-12-28 23:09:44 109

原创 索引创建原则有哪些?

索引创建应遵循以下原则:数据量超过10万时考虑建索引;优先选择查询、排序或分组频繁的字段;推荐使用复合索引覆盖SQL返回值;区分度低的字段放组合索引后面;长字段可用前缀索引;需平衡索引数量,避免影响增删改性能。索引能提升查询效率,但过多会影响写入速度。

2025-12-26 09:33:09 99

原创 MySQL超大分页怎么处理?

针对大数据量分页查询效率低的问题,提出使用覆盖索引和子查询的优化方案。先通过覆盖索引快速查询ID字段完成分页,再基于ID列表用子查询获取完整数据,有效提升查询性能。该方法利用了索引优势,避免了直接大表排序的低效操作。

2025-12-25 17:50:59 110

原创 知道什么叫覆盖索引吗?

覆盖索引是一种优化技术,指查询所需字段全部包含在索引中,无需回表查询主键索引。它能减少I/O操作,显著提升查询性能,是数据库优化的有效手段。

2025-12-21 08:43:37 450

原创 知道什么是回表查询吗?

回表查询是通过二级索引找到主键值,再根据主键查询聚簇索引获取完整数据行的过程。这种操作需要两次索引查找,会影响查询性能,在优化时应尽量减少回表次数。

2025-12-20 14:13:50 69

原创 什么是聚簇索引什么是非聚簇索引?

本文介绍了数据库索引的两种类型:聚簇索引和非聚簇索引。聚簇索引将数据与索引存储在一起,B+树叶子节点包含整行数据,通常由主键构成且每个表只有一个;非聚簇索引则将数据与索引分开存储,B+树叶子节点保存主键值,允许创建多个且多为用户自定义索引。两种索引类型在数据组织和存储方式上存在明显差异。

2025-12-19 09:36:37 278

原创 B树和B+树的区别是什么呢?

B树与B+树的核心差异在于数据存储位置:B树各节点都存数据,B+树仅叶子节点存数据。这种结构使B+树查询效率更稳定,范围查询优势明显,因其叶子节点形成双向链表,支持高效顺序访问。

2025-12-18 09:14:15 88

原创 索引的底层数据结构了解过吗?

MySQL的InnoDB存储引擎采用B+树索引结构,因其具有路径短、磁盘读写高效、适合范围查询等优势。B+树节点可容纳更多子节点,非叶子节点仅存储键值和指针,叶子节点存储数据并形成双向链表,提升了查询性能。

2025-12-17 09:29:55 348

原创 了解过索引吗?(什么是索引)

索引是MySQL中提升查询效率的关键数据结构,通过减少I/O操作和排序成本来优化性能。它能加速数据检索,降低CPU消耗,是数据库优化的重要手段。

2025-12-16 09:48:14 93

原创 SQL语句执行很慢,如何分析呢?

使用MySQL的EXPLAIN命令可分析SQL执行慢的原因。通过检查key和key_len判断索引命中情况,type字段评估优化空间(如全表扫描),extra建议识别回表问题。优化方案包括添加索引或调整查询字段。

2025-12-15 09:22:46 132

原创 SQL语句执行很慢,如何分析呢?

MySQL的EXPLAIN命令是分析SQL性能的重要工具。通过检查key和key_len可判断索引命中情况,type字段能发现全表扫描等优化空间,extra建议可识别回表问题。针对发现的问题,可采取添加索引或修改返回字段等优化措施。

2025-12-14 10:23:10 483

原创 MySQL中,如何定位慢查询?

文章介绍了两种定位慢SQL的方法:1)通过Skywalking监控系统可以直观查看接口响应时间和SQL执行耗时,快速定位问题SQL;2)若无监控系统,可通过MySQL的慢查询日志功能,在配置文件中设置阈值(如2秒),系统会自动记录超时SQL到日志文件。这两种方法都能有效帮助开发人员发现和优化性能瓶颈。

2025-12-13 14:57:51 119

原创 能解释一下I/O多路复用模型?

I/O多路复用通过单线程监听多个Socket,在Socket就绪时通知处理,避免CPU空转。epoll模式直接将就绪Socket写入用户空间,无需遍历检查,提高性能。Redis采用I/O多路复用结合事件处理器处理Socket请求,包括连接应答、命令请求和回复处理器。Redis 6.0后优化性能,在回复处理器使用多线程处理回复事件,命令请求处理器中多线程转换命令,但命令执行仍保持单线程以保证原子性。

2025-12-12 09:05:21 397

原创 Redis是单线程的,但是为什么还那么快?

Redis是一款高性能内存数据库,核心特点包括:1)完全内存操作,C语言实现保证高效;2)单线程架构避免上下文切换和竞争;3)采用多路I/O复用和非阻塞IO模型。其独特设计通过后台线程(如BGSAVE和BGREWRITEAOF)处理持久化操作,确保主线程无阻塞,实现高并发处理能力。

2025-12-11 08:57:46 80

原创 Redis分片集群中数据是怎么存储和读取的?

Redis集群采用16384个哈希槽进行数据分片,每个主节点负责特定的槽范围。通过CRC16算法计算key的哈希值,并对16384取模确定所属槽位,进而定位到存储节点。这种机制实现了数据的均匀分布和高效访问,取值过程采用相同的计算逻辑确保一致性。

2025-12-10 09:18:57 118

原创 Redis的分片集群有什么作用?

分片集群通过多主节点分布式存储解决海量数据问题,每个主节点管理不同数据分片并配备多个从节点提升并发能力。节点间采用类似哨兵模式的健康监测机制,客户端请求可通过任意节点接入并自动路由到正确分片,实现高可用和高扩展性。

2025-12-09 09:02:14 252

原创 Redis集群脑裂,该怎么解决呢?

Redis脑裂问题指网络分区导致Sentinel误判主节点下线,从而选举新主节点,形成双主节点情况。客户端继续向旧主节点写入数据,网络恢复后旧主降为从节点,造成数据丢失。解决方案:1)配置最小从节点数,确保至少一个从节点可同步数据;2)设置主从复制延迟阈值,未达标则拒绝写入请求,减少数据丢失风险。这两种方法可有效缓解脑裂导致的数据不一致问题。

2025-12-08 09:04:52 105

原创 你们使用Redis是单点还是集群,哪种集群?

Redis部署建议采用主从架构(1主1从)加哨兵模式,单节点内存控制在10G以内。内存不足时可为不同服务分配独立的主从节点,避免使用分片集群。原因在于集群维护复杂,心跳检测和数据通信会消耗大量带宽,且不支持Lua脚本和事务功能。这种方案在保证性能的同时简化了运维管理。

2025-12-07 11:33:36 341

原创 怎么保证Redis的高并发高可用?

Redis通过主从集群和哨兵模式实现高可用性。哨兵模式提供自动故障恢复功能,监控主从服务并在master故障时将slave提升为master。故障恢复后自动以新master为主,同时将集群状态变化推送给客户端,确保服务连续性。这种架构能有效保障Redis的高并发和高可用性,是常用解决方案。

2025-12-06 10:09:47 93

原创 能说一下,主从同步数据的流程吗?

Redis主从同步分为全量和增量两个阶段。全量同步发生在从节点首次连接主节点时,主节点会生成RDB文件发送给从节点,并记录同步期间的命令到缓冲区。增量同步则在从节点重启后,主节点根据从节点的offset值,从命令日志中获取增量数据发送给从节点。这种机制确保了主从节点数据的一致性。

2025-12-05 09:27:46 117

原创 介绍一下主从同步

单节点Redis的并发能力有限,可通过搭建主从集群实现读写分离提升性能。典型架构为一主多从,主节点处理写操作,从节点处理读请求。主节点写入数据后会自动同步到从节点,确保数据一致性。这种架构能有效分担负载,提高Redis的整体并发处理能力。

2025-12-04 09:06:41 71

原创 Redis集群有哪些方案,知道吗?

Redis提供三种集群方案:1)主从复制实现读写分离但需手动故障转移;2)哨兵模式自动监控和故障转移,确保高可用;3)分片集群通过哈希槽实现数据分区和自动扩展,兼具高可用与水平扩展能力。三种方案各具特点,可根据业务需求选择不同级别的可用性和扩展性方案。

2025-12-01 09:03:50 224

原创 如果业务非要保证数据的强一致性,这个该怎么解决呢?

Redis虽然支持高可用,但实现强一致性会影响性能。对于强一致性要求高的业务场景,建议采用ZooKeeper实现的分布式锁,它能确保强一致性。

2025-11-30 09:02:31 634

原创 Redisson实现的分布式锁能解决主从一致性的问题吗?

Redis单节点锁在master宕机时可能导致多个线程同时获取锁,存在安全问题。Redisson红锁通过在多数节点上加锁来解决该问题,但会显著降低性能并增加运维成本。由于这些缺点,实际项目中通常不使用红锁,官方也已暂时废弃该方案。

2025-11-29 09:09:49 276

原创 Redisson实现的分布式锁是可重入的吗?

可重入锁通过判断当前线程是否持有锁来避免死锁。内部采用计数机制,线程获取锁时计数加一,释放时减一。数据存储使用哈希结构,大key可自定义业务逻辑,小key为线程唯一标识,value记录重入次数。这种设计实现了线程安全的锁重入功能。

2025-11-28 08:37:23 663

原创 你如何控制Redis实现分布式锁的有效时长呢?

Redisson框架通过优化Redis的SETNX指令实现了更可靠的分布式锁机制。其核心特性包括:1)支持手动控制锁的失效时间和等待时间;2)采用看门狗机制自动续期锁持有时间;3)提供锁自旋功能,在高并发场景下提高性能。相比原生SETNX,Redisson解决了锁续期和竞争等待问题,当持有锁的业务完成后能及时释放,确保后续请求快速获取锁,有效提升了分布式系统的并发处理能力。

2025-11-27 15:52:15 328

原创 Redis分布式锁如何实现?

Redis的SETNX命令实现了独占锁机制,通过单线程特性确保同一时刻只有一个客户端能设置指定key。该命令仅在key不存在时设置值,在key未过期或删除前,其他客户端无法修改该key,从而实现了简单的互斥访问控制。这种机制适用于需要排他性操作的场景。

2025-11-26 13:36:44 329

原创 Redis的内存用完了会发生什么?

Redis内存满时的处理方式取决于数据淘汰策略。默认配置下内存耗尽会直接报错,而allkeys-lru策略则会自动淘汰最近最少使用的数据,保留高频访问的数据在缓存中。这种LRU(最近最少使用)算法能有效优化缓存性能,确保常用数据快速访问。

2025-11-25 08:36:18 227

原创 数据库有1000万数据,Redis只能缓存20w数据。如何保证Redis中的数据都是热点数据?

Redis的allkeys-lru策略采用近似LRU算法管理内存,通过采样键的最近访问时间淘汰冷数据。它在键元数据中记录LRUclock时间戳,当内存不足时随机采样若干键(默认5个),淘汰最久未访问的键。这种实现平衡了性能与准确性,通过多次采样循环逐步释放内存,优化缓存命中率。

2025-11-24 20:27:21 130

原创 Redis的数据淘汰策略有哪些?

redis中提供了很多种,默认是noeviction,不删除任何数据,内部不足时直接报错。这个可以在redis的配置文件中进行设置。里面有两个非常重要的概念:一个是LRU,另外一个是LFU。LRU的意思就是最少最近使用。它会用当前时间减去最后一次访问时间。这个值越大,则淘汰优先级越高。LFU的意思是最少频率使用。它会统计每个key的访问频率。值越小,淘汰优先级越高。我们在项目中设置的是allkeys-lru,它会挑选最近最少使用的数据进行淘汰,把一些经常访问的key留在redis中。

2025-11-23 22:46:57 460

原创 Redis的数据过期策略有哪些?

Redis采用惰性删除和定期删除两种策略管理过期数据。惰性删除在访问key时检查并删除过期项;定期删除则定时扫描清理过期key,包含SLOW模式(默认10Hz,单次≤25ms)和FAST模式(间隔≥2ms,单次≤1ms)两种执行方式。这两种策略协同工作,共同维护Redis的高效数据管理。

2025-11-22 08:38:58 253

原创 Redis做为缓存,数据的持久化是怎么做的?

Redis提供RDB和AOF两种持久化方式。RDB通过快照将内存数据写入磁盘,恢复速度快但可能丢失数据;AOF记录所有写命令,恢复时重放命令,速度较慢但数据更安全。实际项目中通常结合使用两种方式,其中AOF可配置刷盘策略(如每秒批量写入),在数据安全性和性能之间取得平衡。

2025-11-21 21:12:49 411

原创 Redis做为缓存,MySql的数据如何与redis进行同步呢?(双写一致性)

本文介绍了一种基于阿里Canal组件的数据同步方案。该方案通过Canal服务伪装成MySQL从节点,实时读取binlog日志实现数据同步,具有不影响业务代码、部署简单的特点。同步过程允许一定延时,能满足大多数业务需求。Canal客户端获取数据后即可更新缓存,实现了高效的数据库与缓存同步机制。

2025-11-20 15:18:44 79

原创 你听说过延时双删吗?为什么不用它呢?

本文简要介绍了延迟双删策略的实现方式:先在缓存中删除数据,再更新数据库,最后延时删除缓存数据。作者指出该策略存在两个主要问题:一是难以确定合适的延时时间,二是在延时过程中可能出现脏数据,无法保证强一致性。由于这些缺陷,最终没有采用此方案。

2025-11-19 08:44:40 337

空空如也

空空如也

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

TA关注的人

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