- 博客(194)
- 收藏
- 关注
原创 边缘节点缓存的设计与优化:如何让全球用户享受毫秒级体验?
在全球化业务中,边缘节点缓存(Edge Caching)是提升用户体验的关键技术。通过将热点数据部署在靠近用户的边缘节点,系统能够显著降低访问延迟,减轻中心服务器压力,并提升系统可靠性。设计边缘节点缓存时,需考虑数据分布策略(如CDN分发和一致性哈希算法)、缓存更新机制(如主动刷新和延迟双删)以及缓存淘汰策略(如TTL和LRU算法)。实际案例表明,边缘节点缓存在视频流媒体和电商平台中能有效提升响应速度和系统稳定性。最佳实践包括合理的数据分布、缓存更新和淘汰策略,以及系统优化措施如限流和异步更新。
2025-05-13 09:15:29
511
原创 SpringBoot中14个日志使用技巧
日志在软件开发中扮演着关键角色,用于监控应用状态、调试问题和提升性能。以下是一些日志记录的最佳实践: 使用SLF4J统一日志API:避免直接依赖具体实现,便于切换日志框架。 参数化日志:提高性能,避免不必要的字符串拼接。 条件日志:在日志级别满足时执行复杂计算,节省资源。 合理选择日志级别:根据信息的重要性选择合适的日志级别。 使用MDC传递上下文信息:在微服务架构中跟踪请求和用户操作。 记录异常:提供上下文和完整堆栈信息,便于问题排查。 日志标记分类:使用标记分类不同类型的日志信息。 结构化日志输出:在微
2025-05-12 08:44:31
643
原创 SpringBoot 数据权限新姿势,注解+动态SQL
easy-data-scope 是一个通过动态注入 SQL 实现数据权限的项目,支持 MyBatis、MyBatis-plus 和 MyBatis-flex。它简化了数据权限的实现,仅需通过注解即可完成配置,无需复杂的设置。项目搭建包括导入基础依赖和核心依赖,配置数据库连接,并编写启动类。通过实现 DataScopeFindRule 接口并交由 Spring 管理,easy-data-scope 会根据 find() 方法返回的 DataScopeInfo 列表构建 SQL。使用 @DataScope 注解
2025-05-12 08:42:59
134
原创 快速排序技术详解
快速排序是一种高效的分治排序算法,由Tony Hoare于1960年提出。它通过递归地将数据集划分为较小和较大的两个子序列来实现排序,平均时间复杂度为O(n log n),在处理大规模数据时表现优异。算法核心包括选择基准元素、分区和递归排序。优化策略有随机化基准选择和三数取中法,以减少最坏情况的发生概率。快速排序在工程应用中广泛使用,如Python的sorted()函数和C++ STL的sort()实现。尽管最坏时间复杂度为O(n^2),但通过优化,快速排序在大多数实际场景中保持最优性能。
2025-05-10 08:50:45
492
原创 SpringBoot 数据权限新姿势,注解+动态SQL真香!
Easy-Data-Scope 是一个通过动态注入SQL实现数据权限控制的项目,支持MyBatis、MyBatis-plus和MyBatis-flex。其核心特点是使用简单,仅需通过注解即可实现复杂的数据权限控制,无需繁琐配置。项目通过@DataScope注解,结合DataScopeFindRule接口,动态生成SQL语句,实现对数据的精确权限管理。例如,可以通过注解实现仅查看特定ID或年龄范围的用户数据,并支持多条件合并(如IN操作)。项目还提供了灵活的模板和逻辑符配置,支持多种复杂场景下的数据权限控制。
2025-05-10 08:48:11
742
原创 SpringBoot与RSocket整合,实现在线聊天系统
RSocket是一种高性能、双向通信的二进制协议,特别适用于实时数据流和低延迟场景。它支持多种通信模式(如Request-Response、Fire-and-Forget等),比HTTP/REST更高效,尤其在处理高并发和实时数据流时表现优异。RSocket采用长连接和二进制协议,减少资源消耗和延迟,适合高并发的聊天系统等应用。Netflix、CERN、CapitalOne等公司已广泛采用RSocket来实现实时通信和数据处理。通过Spring Boot和RSocket库,可以轻松实现RSocket服务器,
2025-05-09 08:46:57
475
原创 减少冷启动对缓存的影响:实例复用与预热策略如何让系统稳如泰山?
在分布式系统中,冷启动问题是一个常见的性能瓶颈,尤其是在高并发场景下,可能导致数据库压力骤增、用户体验下降和资源浪费。为了解决这一问题,文章提出了两种核心策略:实例复用和缓存预热。实例复用通过共享缓存(如Redis集群)或持久化技术,确保新实例启动后可以直接使用现有缓存数据,避免重新加载。缓存预热则通过定时任务、异步加载或数据迁移等方式,提前将热点数据加载到缓存中,减少冷启动期间的缓存缺失。文章还提供了基于Redis的代码示例,并结合电商平台和内容推荐系统的实际案例,展示了这些策略的有效性。最后,文章总结了
2025-05-09 08:41:17
835
原创 Redis 8.0 震撼发布:AI 时代的数据引擎,性能狂飙 112%!
等新功能,覆盖了从实时推荐到大规模数据分析的多样化场景。开发者可以借助 Redis Copilot 加速开发,利用 Redis Flex 降低成本,并通过向量数据库构建更智能的 AI 应用。Redis官方近期正式发布了8.0版本,新版本不仅回归开源许可模式,还引入了多项性能优化和功能升级,尤其强化了对人工智能(AI)和大规模数据处理的支持。下面咱们来具体看看吧!下面咱们结合实际应用场景详细说说Redis 8.0 新功能的用途和优势。Redis 8.0 通过。
2025-05-08 19:22:58
748
原创 身弱之人如何补印
百米赛跑不适合身弱人群,我们更喜欢做持续投入持续回报的事情,把时间维度拉长我们有更多的试错和纠偏的机会。过多的反思,会让自己过渡的怀疑自己,从而让自己更加内耗。很多他人的指责,只是立场和利益的不同,而不代表你真的有问题。我也是典型的身弱之人,综合以上的特点,身弱的人特别需要保护自己的能量场,需要其他的力量给自己支持支撑,才能取得更好的结果和成就。6.在自身能力范围内,通过购买一些有品质的商品来装备自己,也是增加印的一种方式。7.学习考证,通过学习考取各类的证书来傍身,也是非常有效的提升印的方式。
2025-05-08 08:42:12
239
原创 抖音服务器带宽有多大,才能供上亿人同时刷?
抖音,百度,阿里云,腾讯都是自建的数据中心,都是 T 级别出口带宽(总出口带宽),也就是达到 1T=1024G/s 的出口带宽,服务器总署基本都在 20 万台以上,甚至阿里云都超过了 100 万台。一般情况下,小型的 IDC 公司自建机房,比如一些网站公司,租用联通,移动,电信的机房,可能总体出口带宽只有 5G。超过 30G 那都是具备一定规模的企业。一般情况下:总出口带宽 1TB,实际机房出口带宽可能只有 100G 上下,这是采用双(多)链路设计,双出口实现动态流量分担,总的出口带宽可以达到 T 级别。
2025-05-08 08:40:26
793
原创 高频交易场景下的缓存优化策略:如何在毫秒级响应中实现零误差?
今天,我们来深入剖析高频交易场景下的缓存优化策略,并结合实际案例给出代码示例,帮助大家在设计系统时轻松应对高性能需求。某外汇交易系统需要支持高频的订单撮合操作,但由于涉及多个市场的订单簿数据,系统设计复杂度较高。通过缓存分片和异步刷新,平台成功处理了每秒 100 万级的订单撮合请求,同时避免了热点问题对系统的影响。欢迎在评论区分享你的经验!通过延迟双删机制,系统能够在缓存失效时重新加载最新数据,确保缓存与数据库的一致性。,系统能够在高并发场景下高效更新订单簿数据,同时支持快速的价格排序和查询。
2025-05-08 08:39:42
956
原创 资金账户的缓存一致性保障:如何在高并发下实现零误差?
今天,我们来深入剖析资金账户的缓存一致性保障方案,并结合实际案例给出代码示例,帮助大家在设计系统时轻松应对高并发和强一致性的挑战。通过事务一致性和异步刷新,平台成功处理了每秒 10 万级的转账请求,同时避免了热点问题对系统的影响。通过分布式锁,系统能够在高并发场景下确保账户余额的更新操作是串行化的,避免了超卖或重复扣款问题。你在实际项目中是否参与过资金账户的设计?将高频访问的账户余额存储在 Redis 中,低频访问的账户流水存储在分布式存储中。每次更新账户余额时,先更新数据库,再同步更新缓存,确保一致性。
2025-05-07 08:44:08
1371
原创 SpringBoot中6种拦截器使用场景
拦截器是Spring MVC框架提供的一种机制,用于在控制器(Controller)处理请求前后执行特定的逻辑。@Overridetry {@Data@Data@Data@NotBlank(message = "用户名不能为空")@Size(min = 4, max = 20, message = "用户名长度必须在4-20之间")
2025-05-07 08:43:15
626
原创 同步 vs 异步性能差10倍!SpringBoot 高吞吐接口实现终极方案
Servlet 3.0之后,提供了异步处理请求:可以先释放容器分配给请求的线程与相关资源,减轻系统负担,从而增加服务的吞吐量。在springboot应用中,可以有4种方式实现异步接口(至于SseEmitter,不在本文介绍内,之后新写文章介绍):Callable第一中是Servlet层级的,比较原生的方式,本文不对此介绍(一般都不使用它,太麻烦了)。本文着重介绍后面三种方式。特别说明:服务端的异步或同步对于客户端而言是不可见的。不会因为服务端使用了异步,接口的结果就和同步不一样了。
2025-05-06 08:44:29
695
原创 nginx中限制http请求速率设置
超过瞬间最大请求量以前的请求会被延迟处理,而超过瞬间最大请求量的请求不会被处理,直接返回错误状态码为503,可以用limit_req_status指令自定义错误状态码。ngx_http_limit_req_module模块按照定义的key值限制请求处理速率,特别是对来自单个IP请求的速率限制。8. limit_req指令可以设置多个,如以下配置:限制同个客户端IP的请求速率,同时也限制虚拟主机的请求速率。如果请求速率超过设置,nginx会按设置的速率平滑处理请求(将一些请求延迟处理以达到设置速率)。
2025-05-06 08:43:54
701
原创 百万数据秒级导出Excel实战(含Java源码)
之前分享了一篇,有朋友们希望能提供一下源码便于学习,最近比较忙,今天它终于来了,抽时间整理了一下发出来。
2025-05-06 08:43:13
403
原创 分布式锁(Redlock)在高并发场景下竟能这样优化!
分布式锁是一种用于协调多个进程或服务对共享资源访问的技术。它确保在同一时间只有一个进程能够访问特定的资源,从而避免数据冲突和保证操作的原子性。Redlock算法通过在多个Redis节点上获取锁,确保即使单个节点发生故障,锁操作也能继续进行,从而提高分布式锁的可靠性。Redlock算法是一种有效的分布式锁解决方案,能够帮助开发者在分布式系统中实现数据一致性和操作原子性。然而,在高并发场景下,Redlock也面临着一些挑战,如网络延迟、时钟偏移等问题。
2025-04-30 08:49:27
744
原创 当设计模式遭遇代码熵增:一名Java工程师的架构治理实践
• 代码库会进入自净化状态• 新成员会被现有模式自然同化• 架构治理成本呈指数级下降"整洁不是终点,而是持续抵达终点的过程" —— 共勉。
2025-04-30 08:48:48
725
原创 干货 | 高性能 Nginx 优化配置总结
通过以上配置,我们能达到以下目标:1.并发能力:支持 worker_processes × worker_connections 的并发连接(如4核CPU:4×1024=4096并发)。2.传输效率:通过HTTP/2多路复用、零拷贝、长连接复用,减少50%以上的网络延迟。3.缓存命中率:静态资源缓存30天,文件描述符缓存减少 80 %的磁盘IO。4.性能平衡:SSL会话复用降低 50 %握手开销。
2025-04-30 08:47:59
692
原创 如何配置Nginx高可用?安排!
A: 把两个节点的keepalived角色都设置为BACKUP,并且把优先级高的节点添加nopreempt,参数确保节点异常恢复后,不会自动抢占VIP的问题。keepalived多机器集群 通过心跳检测当前服务器是否还正常工作,如果发送心跳没反应,备份服务器就会立刻接管;# vrrp实例id keepalived集群的实例id必须一致,即主、备机的virtual_router_id必须相同。Q: 如何确保当主节点宕机,主服务迁移至备节点,在主节点服务拉启之后VIP地址不自动切换到主节点,保留在备节点上。
2025-04-30 08:47:04
731
原创 Nginx - 代理后端通过域名访问
接到一个需求,通过nginx 代理互联网上某一个页面,刚开始的时候觉得很简单的,直接 proxy_pass 过去就完事了,测试了下还是想太多。具体记录如下。2. Nginx 根据域名反向代理web服务器通常有三种访问方式:基于ip基于域名基于端口而互联网上暴露的网站多数都是通过 基于域名 的方式,如果直接通过解析后的IP访问,可能就无法访问到网站信息。
2025-04-30 08:46:22
437
原创 MQ黄金三剑客:RabbitMQ、RocketMQ和Kafka深入解密常见问题及功能对比指南?
消息确认机制:消费者在处理完消息后,提交已消费的偏移量(Offset)给Kafka,Kafka会记录已提交的偏移量,以便在消费者重新启动时从正确的位置继续消费。否则,事务回滚,消息将被重新投递。RabbitMQ还提供了多种消息确认机制,如发布确认(Publish Confirm)和事务机制(Transaction),生产者可以通过这些机制获取消息是否成功被RabbitMQ接收和处理的确认。消息确认机制:消费者在处理完消息后,发送确认消息(ACK)给RabbitMQ,告知消息已经成功处理。
2025-04-30 08:45:27
565
原创 Nacos 3.0 强势登场,我太需要这个了!
本文基于 Nacos 3.0 Beta 到 3.0 Release 版本的 GitHub Changelog 中的重要变更进行整理。更多详细信息请参考官方 GitHub Changelog,或以 Nacos 官方正式通告为准。在现代微服务架构中,Nacos 扮演着至关重要的角色。它作为动态命名和配置服务平台,为构建云原生应用提供了便捷的服务发现、配置管理和服务治理能力。自诞生以来,Nacos 凭借其易用性和强大的功能,赢得了广大开发者的青睐,成为构建稳定、高可用微服务体系的关键组件。如今,备受期待的。
2025-04-30 08:44:13
516
原创 基于消息队列的最终一致性:消费方执行失败数据一致性如何保证?
在基于消息队列的最终一致性方案中,若消费方执行失败(如程序崩溃、业务逻辑异常、网络问题等),可能会导致数据暂时不一致。最后留个思考题:如果业务流程中消费方业务逻辑异常,就是进行不下去应该如何处理?:消息内容合法,但业务规则导致处理失败(如库存不足、账户余额不够)业务逻辑不能正常进行。:消费者在处理消息时突然宕机,消息未确认(ACK),MQ触发重投递。的组合策略,即使消费方多次失败,也能最终保障数据一致性。:可能消费者处理时间过长,MQ判定消费失败并重试。注意:不要在拉取消息但还未成功消费前进行ACK。
2025-04-30 08:42:52
576
原创 SpringBoot中4种登录验证码实现方案
图形验证码是最传统且应用最广泛的验证码类型,原理是在服务端生成随机字符串并渲染成图片,用户需要识别图片中的字符并输入。图形验证码实现简单,对用户体验影响较小,是中小型应用的理想选择。短信验证码通过向用户手机发送一次性验证码实现身份验证。用户需要输入收到的验证码完成登录过程。这种方式不仅验证了账号密码的正确性,还确认了用户对手机号的控制权,大幅提高了安全性。邮箱验证码通过向用户注册的电子邮箱发送一次性验证码实现身份验证。
2025-04-29 11:48:59
870
原创 干货 | 高性能 Nginx 优化配置总结
通过以上配置,我们能达到以下目标:1.并发能力:支持 worker_processes × worker_connections 的并发连接(如4核CPU:4×1024=4096并发)。2.传输效率:通过HTTP/2多路复用、零拷贝、长连接复用,减少50%以上的网络延迟。3.缓存命中率:静态资源缓存30天,文件描述符缓存减少 80 %的磁盘IO。4.性能平衡:SSL会话复用降低 50 %握手开销。
2025-04-29 09:07:49
711
原创 Spring Boot 又一强大的内置功能,自动记录API请求/响应数据
传统方案需手动实现请求体缓存、响应流复用等复杂逻辑,而Spring Boot Actuator通过内置的Filter能够轻松的记录请求/响应相关的信息。通过 /actuator/httptrace 端点,Actuator 可记录最近 100 条 HTTP 请求的元数据(如方法、URI、状态码、耗时等),但默认不包含请求体、响应体等敏感数据。实际如果你真使用了来记录HTTP请求/响应日志,那么你完全可以不用上面/ac/httpexchanges接口进行查询,该接口返回的所有数据肯定是不行的。
2025-04-29 08:49:42
247
原创 高性能 WEB 服务器 Nginx:location 指令使用
2.5.2 location 规则优先级。2.5.3 location 匹配范例。2.5.1 root 与 alias。2.5 location 指令使用。区分大小写 和不区分大小写。@location 重定向。2 Nginx 配置。
2025-04-29 08:47:41
95
原创 分库分表退出历史舞台?我双手赞成。。。
技术总是要进步的。分库分表,不是错,它在那个年代,解决了实际问题,是很多系统撑起流量的支柱。但如今,分布式数据库已经逐步走入正轨,成为更成熟、更底层的解决方案。要说分库分表会不会彻底消失?我觉得不会。就像今天你还会看到写纯 SQL 的人,虽然 ORM 很香;你还会看到有人坚持手撸 Redis 连接池,虽然 Spring Data Redis 一键搞定。该退出的角色,终究会被历史“温柔劝退”。就像你不会再买诺基亚 3310,虽然它电池真能用十天;你也不会坚持用 IE 浏览器,虽然它当年也登过顶峰。
2025-04-29 08:46:13
261
原创 高性能WEB服务器Nginx常用功能(二):长连接配置、作为下载服务器、作为上传服务器、限流限速
如果倒入水的速度大于漏水的速度,那么水桶内的水会不断增加直到最后溢出,这种情况下在水桶中的水可以理解为在队列中等待的请求,而溢出的水则表示直接被丢弃不处理的请求。目前 Nginx 中主要的三种限速操作分别是:限制请求数(request),限制连接数(connection),限制响应速度(rate),对应在 Nginx 中的模块指令分别是 limit_req,limit_conn 和 limit_rate 三部分。倒入的水则代表客户端发送给服务器但尚未进行处理的请求,此时请求仍在队列(在桶内)
2025-04-29 08:44:30
137
原创 彻底搞懂 OAuth2.0
你可能注意到,虽然说 OAuth2 协议解决的是授权问题,但它也应用到了认证的概念,因为只有验证了用户的身份凭证,我们才能完成对他的授权。授权码模式功能最完整,流程也最严密,当用户同意授权后,授权服务器不是马上返回最终的令牌,而是一个授权码,需要客户端携带授权码去换令牌,这就需要客户端自身具备与授权服务器进行直接交互的后台服务。它是 OAuth2 协议中非常重要的一个概念,本质上也是一种代表用户身份的授权凭证,但与普通的用户名和密码信息不同,令牌具有针对资源的访问权限范围和有效期。
2025-04-28 10:20:59
519
原创 MySQL 上亿数据表优化后,接口不卡了,系统也稳了
- 拿到要删除的最大主键 ID-- 每次只删 20000 条然后在应用层做个循环,每次删完睡 0.5 秒,看是不是为 0,为 0 就退出循环。说实话,这种小批量删除法,不仅减轻了主库压力,还让从库同步更顺畅,凌晨 Sentry 报警直接“消失”。
2025-04-28 10:19:41
513
原创 MySQL LEFT JOIN 性能优化策略
我们现在有一个驱动表customer,它存储客户id、姓名以及出生日期,默认情况下id是主键,没有任何索引,对此我们给出DDL语句: customer有一张关联表,c_id记录着与其关联数据的id,并用available_balance记录客户余额,对应DDL如下,可以看到此时我们没有添加任何索引: 假设此时数据库大约有2000w的数据,我们希望查出姓名为if2vbdr1kzk47rdmulrxix48tl2r9finmonxpl25cfrqvv7m0t的用户的出生日期和可用余额,如果没
2025-04-28 09:41:01
553
原创 延迟双删、异步重试、Binlog监听:高并发可靠的Redis数据一致性机制
在实际开发中,缓存与数据库的数据不一致问题时有发生,尤其是在高并发场景下,Redis作为缓存层,经常会遇到缓存中的数据与数据库不同步的情况。本文从常见的缓存更新策略——缓存旁路策略出发,分析数据不一致产生的根本原因,并整理了常用的解决办法以及终极解决方案,可以帮助你系统性地理解和应对Redis缓存一致性问题。1.为什么会数据不一致2.怎么解决数据不一致2.1 延迟双删2.2 异步重试删除2.3 BinLog监听兜底2.4 事务/分布式锁3.终极解决方案。
2025-04-28 08:53:39
1020
原创 一个注解让 Spring Boot 项目接口返回数据脱敏
当返回对象比较复杂,需要递归去反射,性能一下子就会降低,于是换种思路,我想到平时使用的 @JsonFormat,跟我现在的场景很类似,通过自定义注解跟字段解析器,对字段进行自定义解析,tql。要做成可配置多策略的脱敏操作,要不然一个个接口进行脱敏操作,重复的工作量太多,很显然违背了“多写一行算我输”的程序员规范。思来想去,定义数据脱敏注解和数据脱敏逻辑的接口, 在返回类上,对需要进行脱敏的属性加上,并指定对应的脱敏策略操作。需求是某些接口返回的信息,涉及到敏感数据的必须进行脱敏操作。
2025-04-28 08:47:57
218
原创 多方面分析Redis为什么快的原因
select/epoll提供了基于事件的回调机制,即针对不同事件的发生,调用相应的事件处理器,因此Redis一直在处理事件,提升了Redis 的响应性能。因此Redis使用了两个全局哈希表,通过rehash操作,增加现有的哈希桶数量,分散单桶元素数量,从而在减少哈希冲突的同时缩短链表长度,提高Redis的查询效率。epoll是最新的也是目前最好的多路复用技术。Redis的单线程指的是Redis的网络IO及键值对指令读写是由一个线程来执行的,对于Redis的持久化、集群数据同步、异步删除等都是其他线程执行。
2025-04-28 08:46:29
806
原创 Spring Boot 实现 IP 限流:原理、实践与利弊分析
在 Spring Boot 中实现 IP 限流是一种简单而有效的方式来保障系统的稳定性和可用性。通过令牌桶算法或漏桶算法,可以对每个 IP 地址的请求频率进行精确控制。虽然 IP 限流存在一些缺点,但在大多数场景下,它仍然是一种不可或缺的限流策略。通过本文的代码案例,你可以快速在自己的 Spring Boot 项目中实现 IP 限流功能。
2025-04-28 08:44:45
954
原创 化腐朽为神奇:如何巧用Nginx将旧网站改造为HTTPS?
此时可以换一种思路,能不能在这些网站前面再加一层代理,当访问前面这个https网站时,将请求转发到后端的实际业务http网站上去呢?在现实生活中,遇到过很多医院或政府仍然使用的是http网站,这显然已经不是当今世界的主流。这里用grafana举例,本身grafana提供的是一个http网站,在前面加一层Nginx代理,当客户端访问Nginx的https网站时,自动跳转到grafana。但有一点,如果是源码安装,编码的时候需要--with-http_ssl_module,使能Nginx的ssl模块。
2025-04-28 08:43:41
421
原创 JWT 实现登录认证 + Token 自动续期方案
通过以上的代码,我们可以在Spring Boot应用中实现JWT认证和Token自动续期机制,而不依赖Spring Security。l Token自动续期:设置JWT的过期时间,并且在Token快过期时,客户端发送请求到后端,后端验证Token并返回一个新的Token。客户端使用新Token继续进行后续的请求。l JWT认证:用户通过用户名和密码进行登录,后台验证成功后生成JWT Token,并返回给客户端。启动应用程序,访问/login接口,提供用户名和密码进行登录,成功后将返回JWT Token。
2025-04-27 16:42:42
384
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人