- 博客(119)
- 收藏
- 关注
原创 mysql索引底层B+树
改写为范围查询:WHERE create_time >= '2025-03-01' AND create_time < '2025-04-01'。-- phone为varchar类型。高频查询:用户通过手机号查找柜号(SELECT * FROM lockers WHERE phone='13812345678')。有效查询:WHERE department='心血管科' AND status='待就诊'(使用前两列)。无效查询:WHERE status='待就诊'(跳过第一列,触发全表扫描)。
2025-07-24 20:31:54
580
原创 延迟双删是什么
当线程1在查询缓存且未命中,此时线程1查询数据,查询完准备写入缓存时,由于没有加锁线程2乘虚而入,线程2在这期间对数据库进行了更新,此时线程1将旧数据返回了,出现了脏读,这个事件发生的概率很低,因为先是需要满足缓存未命中,且在写入缓存的那段事件内有一个线程进行更新操作,缓存的查询很快,这段空隙时间很小,所以出现脏读现象的概率也很低。删除缓存模式:更新数据时更新数据库并删除缓存,查询时更新缓存,无效写操作较少(推荐使用) 选择使用删除缓存模式,那么是先操作缓存还是先操作数据库?使用困难,灵活度高。
2025-07-15 20:19:42
499
原创 redis实现红锁
红锁算法自诞生起就伴随着**N(网络延迟)、P(进程暂停)、C(时钟漂移)**三个核心争议,这些现实世界中的不确定因素,动摇了红锁在数学意义上的绝对安全性。在N个独立Redis节点(非Cluster模式)中,当客户端在半数以上节点成功获取锁,且总耗时小于锁有效期时,才认为锁获取成功。在时间窗口T+48到T+50之间,客户端认为锁仍有效,但节点C的锁已提前失效。锁实际在T0+200ms已失效,但客户端在T0+400ms仍以为自己持有锁。客户端在节点A、B、C成功获取锁,总耗时48ms(小于TTL 50ms)
2025-07-14 21:34:42
410
原创 延迟双删是什么
当线程1在查询缓存且未命中,此时线程1查询数据,查询完准备写入缓存时,由于没有加锁线程2乘虚而入,线程2在这期间对数据库进行了更新,此时线程1将旧数据返回了,出现了脏读,这个事件发生的概率很低,因为先是需要满足缓存未命中,且在写入缓存的那段事件内有一个线程进行更新操作,缓存的查询很快,这段空隙时间很小,所以出现脏读现象的概率也很低。删除缓存模式:更新数据时更新数据库并删除缓存,查询时更新缓存,无效写操作较少(推荐使用) 选择使用删除缓存模式,那么是先操作缓存还是先操作数据库?使用困难,灵活度高。
2025-07-12 23:48:46
462
原创 redis内存淘汰策略
假如你的过期 key,靠定期删除没有被删除掉,还停留在内存里,除非你的系统去查一下那个 key,才会被redis给删除掉。注意这里是随机抽取的。Redis是基于内存key-value键值对的内存数据库,我们安装完数据库之后,内存往往会受到系统内存大小的限制,我们也可以配置redis能使用的最大的内存大小.FIFO是最简单的淘汰策略,遵循着先进先出的原则,每进行一次redis操作的时候,redis都会检测可用内存,判断是否要进行内存淘汰,当超过可用内存的时候,redids 就会使用对应淘汰策略。
2025-07-11 21:30:22
328
原创 RabbitMQ
Channel(信道) Channel是连接(Connection)内的逻辑通道,用于完成大部分 AMQP 操作,如声明队列、发送和接收消息等。Queue(队列) 队列是消息的缓存区,用于存储交换机发送的消息。(Exchange相当于Queue的代理,可以设置不同的写入策略,写入到对应的队列中。交换机是消息的接收和分发中心,负责接收生产者发送的消息,并根据指定的路由规则发送到一个或多个队列中。出现流量高峰时,消息队列可以暂时存储过多的消息,以平滑处理流量的波动,避免系统被突发的。
2025-07-10 20:14:13
774
原创 布隆过滤器
带着上面的几个疑问,我们来看看到底什么是布隆过滤器。布隆过滤器:一种数据结构,是由一串很长的二进制向量组成,可以将其看成一个二进制数组。既然是二进制,那么里面存放的不是0,就是1,但是初始默认值都是0。如下所示:①、添加数据介绍概念的时候,我们说可以将布隆过滤器看成一个容器,那么如何向布隆过滤器中添加一个数据呢?如下图所示:当要向布隆过滤器中添加一个元素key时,我们通过多个hash函数,算出一个值,然后将这个值所在的方格置为1。
2025-07-09 19:32:14
704
原创 缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级
比如“秒杀详情页”、“爆款商品页”,一个 key 的 TTL 正好到期时,Redis 失效,大量请求涌入 DB。雪崩 大量缓存同时失效 TTL 随机化、本地缓存、预热 Redis 分区集群化部署。缓存穿透指的是用户请求的数据既不在缓存中,也不在数据库中,因此每次请求都会落到数据库。在同一时间内,大量缓存 key 同时失效,导致数据库雪崩式崩溃。用于拦截不存在的 key,避免每次都访问 Redis/DB。缓存设计如果缺乏熔断/降级思维,可能成为系统不可承受之痛。// 初始化已有 ID。
2025-07-07 21:22:55
616
原创 优化MySQL查询
一、查询语句优化:避免使用SELECT *,尽量明确指定需要的字段。例如,如果只需要用户表中的用户名和邮箱,应该写,而不是。这样可以减少数据传输量,提高查询效率。:尽量不要在WHERE子句中对字段使用函数。例如,避免写,因为这会导致MySQL无法利用索引。可以改写为。JOINJOIN:如果可以通过子查询或者在单表中完成的操作,尽量避免使用JOIN,因为JOIN操作会增加查询的复杂度和资源消耗。但如果确实需要关联多个表来获取数据,合理的JOIN是必要的。JOIN:确保JOIN的字段上有合适的索引。例如,在。
2025-07-05 20:39:00
820
原创 Redis的缓存击穿和缓存雪崩
缓存击穿和缓存雪崩都是缓存系统中常见的问题,它们都会导致数据库压力过大。解决这些问题的关键在于合理设计缓存策略,例如设置合理的过期时间、使用互斥锁、引入本地缓存和消息队列等。通过这些方法可以有效缓解缓存失效带来的压力,提高系统的稳定性和性能。
2025-07-04 21:33:01
853
原创 Redis实战:数据安全与性能保障
通过合理配置持久化策略、优化网络和命令使用、加强安全措施,可以在保证数据安全的同时提升Redis的性能。:通过创建快照将内存中的数据写入到磁盘上的RDB文件中。可以在配置文件中设置。配置主从复制,将数据复制到多个从服务器上,分担读取压力,提高数据可靠性。:每次写操作都同步到磁盘,数据最安全,但性能影响最大。:由操作系统决定何时同步,性能最好,但数据安全性最低。:设置密码认证,限制访问IP,使用ACL控制用户权限。:每秒同步一次,兼顾性能和数据安全,推荐使用。:可以在保证数据安全的同时,提高恢复速度。
2025-07-03 20:34:43
339
原创 Redis在项目中的使用
Redis 在项目中的使用非常广泛,可以根据具体需求选择合适的使用场景。通过合理利用 Redis 的各种功能,可以显著提升系统的性能和用户体验。
2025-07-02 21:22:12
637
1
原创 Redis 实现消息队列
Redis Stream 是 Redis 在消息队列和流式数据处理领域的一个重要补充,它提供了简单但功能强大的数据流处理能力,为开发者提供了更多的选择和灵活性。相对 List,Stream 的优势如下:支持消息确认机制(ACK 应答确认)。支持消息回溯,方便排查问题和做消息分析。存在消费组(Consumer Group)的概念,可以进行分组消费和批量消费,可以负载多个消费实例。
2025-07-01 20:27:09
775
原创 Redis 集群
Redis 集群是一种分布式存储解决方案,用于解决单机 Redis 在高并发、大数据量场景下的性能瓶颈和数据可靠性问题。它通过将数据分散到多个 Redis 节点上,实现数据的分布式存储和计算,从而提高系统的可扩展性和容错性。
2025-06-30 21:12:52
1033
原创 Redis 实现分布式锁
分布式锁是一种用于在分布式系统中实现同步和互斥访问的机制。在分布式系统中,多个节点同时访问共享资源可能会导致数据不一致或竞争条件的发生。分布式锁提供了一种保护共享资源的方式,以确保在任意时刻只有一个节点可以访问该资源,如:同一时刻每个订单只能有一个线程操作取消订单功能。常见分布式锁实现:MySQL:MySQL本身就带有锁机制,由于业务特性使用MySQL作为分布式锁并不合适,而且性能一般,一般很少使用MySQL来实现分布式锁。
2025-06-28 21:54:55
518
原创 【无标题】
但是如果出现网络分区,从节点长期连不上主节点,就会出现数据不一致的问题,特别是在网络分区出现的情况下又不小心主节点宕机了,那么数据就会丢失,所以在生产环境要做好实时监控工作,保证网络畅通或者能快速修复。该参数表示在正在进行AOF重写时不会将AOF缓冲区中的数据同步到旧的AOF文件磁盘,也就是说在进行AOF重写的时候,如果此时有写操作进来,此时写操作的命令会放在aof_buf缓存中(内存中),而不会将其追加到旧的AOF文件中,这么做是为了避免同时写旧的AOF文件和新的AOF文件对磁盘产生的压力。
2025-06-27 21:31:52
973
原创 redis总结
Redis 提供了键过期功能,也提供了灵活的键淘汰策略,所以,现在 Redis 用在缓存的场合非常多。Redis 列表结构,LPUSH 可以在列表头部插入一个内容 ID 作为关键字,LTRIM 可以用来限制列表的数量,这样列表永远为 N ,无需查询最新的列表,直接根据 ID 去到对应的内容也即可。
2025-06-26 20:38:30
308
原创 单体架构VS微服务架构
微架构是一种面向服务的架构模式,将一个大型应用程序拆分为一组小型、自治的服务,每个服务专注于完成特定的业务功能。微架构是一种面向服务的架构模式,将一个大型应用程序拆分为一组小型、自治的服务,每个服务专注于完成特定的业务功能。在单体架构中,应用程序的各个模块之间通常存在紧密的依赖关系,它们共享相同的代码库和数据库。而微服务架构中的服务是相互独立的,彼此之间通过API进行通信,每个服务都有自己的数据库和业务逻辑。而微服务架构中的服务是相互独立的,彼此之间通过API进行通信,每个服务都有自己的数据库和业务逻辑。
2025-06-25 20:41:51
1047
原创 微服务组件
用于服务的注册与发现,管理微服务的地址信息。常见的实现包括:配置中心:用于集中管理微服务的配置信息,可以动态修改配置而不需要重启服务。常见的实现包括:远程调用:用于在不同的微服务之间进行通信和协作。常见的实现保包括:RESTful API:如RestTemplate、FeignRPC(远程过程调用):如Dubbo、gRPCAPI网关:作为微服务架构的入口,统一暴露服务,并提供路由、负载均衡、安全认证等功能。
2025-06-24 20:07:18
1123
原创 微服务架构的适用
**结论**:微服务是**演进结果而非起点**,适合解决**规模与复杂度**问题,评估团队及基建成本后再落地。✅ **业务复杂度高**:大型系统(如电商、ERP)需拆解独立服务(订单/库存/支付),实现模块化开发与部署。✅ **弹性扩展需求**:应对流量峰值(如秒杀),仅扩容瓶颈服务(如订单集群),资源利用率提升50%+。✅ **混合技术栈**:不同模块适配最优技术(AI用Python、交易用Java),避免技术绑架。⚠️ **强事务场景**(如转账)→ 需引入Saga分布式事务,架构复杂度陡升。
2025-06-21 21:33:29
477
原创 Seata的总结
Seata 提供了一个强大而灵活的框架来处理分布式事务问题,使得开发者可以在享受微服务带来的各种好处的同时,也能有效管理事务的一致性和完整性。对于正在构建或已经采用微服务架构的企业来说,掌握 Seata 无疑是一项重要的技能。
2025-06-20 21:28:21
390
原创 nacos的总结
Nacos 支持多种服务注册方式,包括 API、SDK 和 Annotation 等,服务消费者可以通过 DNS 或 RPC 方式方便地发现服务。其健康检查机制通过主动和被动的方式实时监测服务实例的健康状态,确保流量不会被发送到不健康的服务实例上,支持的健康检查模式包括 HTTP、TCP、自定义健康检查等。:Nacos 提供了集中化的配置管理,支持配置的实时推送和热更新,无需重启应用即可生效,这对于需要快速迭代和频繁调整配置的微服务应用非常关键,有助于实现配置的统一管理和快速变更。
2025-06-19 20:29:23
1006
原创 微服务网关
6. **协议转换**:支持多种协议和数据格式,如HTTP、WebSocket、gRPC等,方便与不同类型的客户端通信。4. **流量控制**:对进入的流量进行控制,如限流、熔断,防止后端服务被过多请求压垮。1. **统一入口**:为所有微服务提供唯一的入口点,简化客户端与服务的交互。3. **服务治理**:集成注册中心,实现服务发现、健康检查和负载均衡等功能。5. **灰度发布**:作为灰度发布的入口,支持灵活的流量控制和版本管理。7. **请求聚合**:聚合多个微服务的数据,减少客户端的复杂性。
2025-06-18 21:11:06
964
原创 JWT(JSON Web Token)
JWT(JSON Web Token)是一种基于JSON的开放标准(RFC 7519),用于在多方之间安全地传输信息,尤其适用于无状态的身份认证场景。其核心机制通过数字签名确保数据的完整性和可信性,同时避免了传统会话认证的局限性(如服务器端状态存储问题)。JWT通过紧凑的结构和安全的签名机制,成为现代无状态认证的主流方案,但其设计需结合业务场景和安全需求,合理权衡便利性与风险。JWT由三部分通过点(
2025-04-09 20:04:00
781
原创 彩虹表是什么
彩虹表是一种用于破解加密散列函数的预计算表,主要用于破解密码的哈希值。• 时空折中:彩虹表基于时空折中理论,通过预先计算并存储大量可能的密码及其哈希值,减少破解时的计算时间。• 破解加密文件密码:如果加密文件的密码通过哈希算法存储,彩虹表可以快速匹配哈希值,从而破解密码。彩虹表虽然在密码破解中效率较高,但随着加密技术的发展,其威胁已逐渐被新的防御措施所抑制。• 排序与查找:生成后需对彩虹表进行排序,以便快速查找匹配的哈希值。• 局限性:彩虹表的生成和存储成本较高,且对复杂密码的破解效率较低。
2025-04-08 23:19:28
515
原创 基于 Spring Boot 的项目模板搭建指南
如需完整代码示例,可参考 SpringBoot 初始化模板 - SegmentFault 或 优快云 博客模板。访问 Spring Initializr,选择依赖后下载模板。
2025-04-01 20:30:52
1178
原创 Java 之Redis
一、Redis核心概念与特性Redis是基于内存的键值型NoSQL数据库,支持多种数据结构(字符串、哈希、列表、集合、有序集合等),常用于缓存、分布式锁、消息队列等场景。其核心优势在于内存存储带来的高性能(可达10万+ QPS)和单线程模型避免并发冲突。
2025-03-31 20:20:10
910
原创 Redis 在 Linux 系统的安装指南
以上步骤综合了 Linux 和 Windows 的主流安装方法,覆盖了从依赖安装到服务优化的全流程。如需更详细的配置文件参数说明,可查阅 Redis 官方文档或相关教程。
2025-03-28 20:25:21
1320
原创 Java虚拟机
• Java虚拟机栈(Java Virtual Machine Stacks):Java虚拟机栈是线程私有的,它用于存储方法调用过程中的局部变量表、操作数栈、动态链接、方法出口等信息。当方法执行完毕后,栈帧被弹出。它的主要作用是将Java字节码(Java程序编译后的中间代码)转换为机器码,从而在不同的操作系统和硬件平台上运行Java程序。Java虚拟机的出现使得Java语言具有了“一次编写,到处运行”(Write Once,Run Anywhere,简称WORA)的特性,大大提高了Java程序的可移植性。
2025-03-27 19:00:51
359
原创 Redis(Remote Dictionary Server)
支持字符串(String)、列表(List)、哈希(Hash)、集合(Set)、有序集合(Sorted Set)等基础类型,以及位图(Bitmaps)、HyperLogLog(基数统计)、地理空间索引(GEO)等高级结构,满足复杂业务需求。Redis将数据存储在内存中,读写速度极快(读约11万次/秒,写约8.1万次/秒),适合高并发场景。其单线程模型避免了多线程竞争问题,结合非阻塞I/O多路复用技术(如epoll),进一步提升了处理效率。存储用户会话信息(如购物车),支持跨服务共享。
2025-03-25 17:14:17
476
原创 安装CentOS7
Linux能做什么?Linux 能为几乎所有类型的 IT 计划奠定基础,包括容器、云原生应用和安全防护。许多全球规模最大的行业和企业都仰赖于 Linux——从 Wikipedia 等知识共享网站,到纽约证券交易所,再到运行 Android(一个包含免费软件的 Linux 内核专用发行版)的移动设备,它无处不在。经过多年的发展,Linux 已成为了行业广泛接受的标准,成为在数据中心和云部署中运行高可用性、高可靠性和关键工作负载的首选。
2025-03-21 20:21:02
285
原创 MyBatis的插件机制
MyBatis插件机制通过动态代理和拦截器链实现无侵入式扩展,开发者需关注接口方法签名、代理链生成及执行顺序。合理使用插件可增强框架功能(如日志、分页),但需权衡性能与复杂度。
2025-03-19 20:56:35
536
原创 Spring Boot 的自动装配
Spring Boot 的自动装配本质是约定优于配置思想的体现,通过 SPI 机制加载配置类、条件注解动态过滤、Starter 模块化依赖管理,实现了零配置或低配置的开发体验。其底层依赖 Spring 框架的和@Import机制,确保扩展性而不侵入框架源码。
2025-03-17 20:00:27
1304
原创 Spring Boot
通过上述机制,Spring Boot使微服务开发从单体应用的数月周期缩短至数天,同时保持服务的高可用性和可维护性,成为云原生时代微服务架构的首选技术栈。
2025-03-12 21:11:19
572
原创 Java是值传递
对象变量存储的是对象的引用地址(类似指针值),参数传递时该地址值被复制为副本。在方法内,若通过副本修改对象属性(如。无论是基本数据类型还是对象类型,传递给方法的是变量值的副本,而非变量本身。理解这一机制对避免代码逻辑错误至关重要,尤其在编写涉及状态修改的方法时。但若修改引用副本本身(如。Java中的参数传递始终是。),原始引用不受影响。
2025-03-07 22:53:31
650
原创 MyBatis 配置文件核心
以下是针对你的笔记中的三个核心标签的详细解析,帮助你全面理解它们的用途和配置逻辑。外部配置文件内容 ()易错点 ❌ 路径错误: 指向的文件不在 目录中。 ❌ 未转义特殊字符: 需要用 转义(如 Redis 配置中的 )。2. 标签:全局行为控制功能 控制 MyBatis 的底层运行机制,如日志、缓存、驼峰映射等。 需严格按照官方文档配置参数和值类型。常用配置项 设置名称(name) 作用 默认值
2025-03-06 23:47:33
404
原创 MyBatis框架之映射文件加载方式
通过合理选择加载方式并遵守规范,可显著提升MyBatis的开发效率与维护性。建议根据项目具体需求(如是否以注解为主、团队结构规范程度)灵活选用。在MyBatis框架中,映射文件(XML)的加载方式直接影响SQL与Java接口的绑定效率。直接通过XML配置文件逐一声明映射文件的。,显式指定资源位置。形式批量加载XML,要求。
2025-03-05 21:18:00
587
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅