LeeQingShui's Blog

  • 标签

  • 分类

  • 归档

  • 关于

(术)Redis 缓存治理

发表于 2026-08-01 | 更新于 2026-10-22 | 分类于 NoSQL
本文字数: 14k | 阅读时长 ≈ 21 分钟

序言

  如果没有缓存,一个高并发系统会怎样?用户每一次查询都访问数据库,数据库的 CPU、磁盘 IO、连接数都会快速达到瓶颈,系统响应时间越来越长,最终无法支撑业务增长。因此,缓存几乎成为了现代互联网高并发系统的标准配置。

  但是,当我们引入缓存之后,又会发现新的问题接踵而至:

  • 数据库已经更新了,为什么用户看到的还是旧数据?
  • 为什么有的缓存 Key 过期了,数据库就突然被打挂了?
  • 为什么在 Redis 集群中,有的节点压力很大而有的却相对空闲?

  这些问题背后,其实都指向同一个核心:缓存不是数据源,而是数据源的副本。

  只要是副本,就必然存在一致性问题;只要存在失效,就必然存在高并发下的流量冲击。

  因此,缓存设计的本质,不是简单地把数据放进 Redis,而是在性能、复杂度和一致性之间寻找一个合理的平衡点。

  接下来,我们将从缓存一致性问题开始,逐步分析缓存的工作原理,以及高并发场景下各种典型问题的解决方案。

阅读全文 »

浅析 Web 权限控制机制:从 RBAC、ABAC 到数据权限与字段权限

发表于 2026-07-28 | 更新于 2026-11-09 | 分类于 信息安全
本文字数: 19k | 阅读时长 ≈ 27 分钟

序言

  在 Web 应用开发中,身份认证和权限控制是两个非常基础、但又容易混淆的技术环节。

  例如,在一个企业管理系统中,用户登录成功后,可能需要查看订单、处理审批、管理部门成员等业务数据。此时,服务器不仅需要知道当前请求来自哪个用户,还需要进一步判断:这个用户是否可以访问对应的功能?是否可以查看这条订单?是否可以看到订单中的金额、利润等敏感字段?

  这些问题都属于权限控制的范畴。

  在实际业务中,权限控制通常不只是简单地判断用户是否拥有某个菜单或按钮。随着系统规模扩大,权限控制会逐渐细化为多个层次:

  • 功能权限:用户是否可以访问某个菜单、接口或执行某项操作
  • 数据权限:用户可以访问哪些业务数据,例如全部数据、本部门数据或本人数据
  • 字段权限:用户可以查看、修改或导出一条数据中的哪些字段

  围绕这些需求,常见的权限控制模型主要包括 RBAC(Role-Based Access Control,基于角色的访问控制)和 ABAC(Attribute-Based Access Control,基于属性的访问控制)。

  RBAC 通过用户、角色和权限之间的关系完成授权,适合大多数企业管理系统;ABAC 则根据用户、资源、操作和环境等属性动态判断是否允许访问,能够处理更加复杂的业务规则。

  需要注意的是,RBAC 和 ABAC 解决的是授权决策采用什么依据的问题,而数据权限和字段权限描述的是权限控制的粒度。它们并不是互相替代的关系,实际系统中往往需要组合使用。

  本文将从权限控制的基本概念出发,逐步介绍 RBAC、ABAC 的设计思想,再进一步讨论数据权限、字段权限以及它们在 Java 后端系统中的落地方式。

阅读全文 »

JVM 诊断工具详解:从命令行到图形化分析

发表于 2026-07-19 | 更新于 2026-11-09 | 分类于 JVM
本文字数: 20k | 阅读时长 ≈ 29 分钟

序言

  Java 应用在开发和运行过程中,难免会遇到各种 JVM 层面的问题。例如,应用运行一段时间后内存持续增长,最终出现 OutOfMemoryError;某个接口响应突然变慢,CPU 使用率却持续处于高位;线程池中的线程长期处于等待或阻塞状态;又或者 GC 频率异常,导致应用出现明显的停顿。

  这些问题通常不能只通过业务日志定位,还需要结合 JVM 的运行数据进行分析。JDK 提供了一系列命令行诊断工具,可以帮助我们查看虚拟机进程、内存、垃圾收集、线程以及运行参数等信息。除此之外,也可以使用 VisualVM、JProfiler、Arthas、Prometheus 等图形化工具,它们提供了更直观的监控视图和更深入的性能分析能力。

  本文按照 JVM 问题排查的实际思路,介绍常见的 JDK 命令行工具、Arthas 在线诊断工具和图形化诊断工具。除了使用 JProfiler 分析内存、CPU、线程和锁相关问题,文章还会结合 Arthas 的常用命令,说明如何在不重启应用的情况下连接目标 JVM,快速查看 CPU 占用、线程阻塞和堆内存状态。

  当然,部分工具和参数具有明显的 JDK 版本差异,本文会在相关位置说明 JDK 8 与较新 JDK 版本之间的区别,避免环境差异性导致处理出错。

阅读全文 »

从 JDK 8 到 Java X:版本演进与新特性

发表于 2026-06-17 | 更新于 2026-11-06 | 分类于 Java 基础
本文字数: 3.8k | 阅读时长 ≈ 5 分钟

序言

  JDK 8 是 Java 发展历程中一个重要的长期支持版本,至今仍然广泛应用于各类企业级系统。然而,随着 Java 持续演进,新版本不仅引入了更加简洁的语言特性,也在 JVM、并发编程和运行时能力等方面不断完善。

  对于仍在使用 JDK 8 的存量项目而言,是否需要升级,以及应该选择哪个版本,已经成为值得认真考虑的技术问题。

  升级 JDK 并不只是更换一个运行环境。它还涉及长期维护、安全更新、框架兼容性、第三方依赖以及现有业务代码的适配。如果只关注版本号,而忽略这些因素,就可能付出较高的迁移成本,却没有获得预期收益。

  因此,本文将围绕三个问题展开:

  • 版本如何选择? 梳理 JDK 11、17、21、25 的定位与支持周期
  • 升级能获得什么? 介绍各版本在语言特性、运行时和并发编程方面的重要变化
  • 不同版本有什么区别? 通过对比表,帮助开发者快速理解各版本的技术演进方向
阅读全文 »

江河分流:分库分表之Sharding-JDBC

发表于 2026-04-22 | 更新于 2026-10-18 | 分类于 关系型数据库
本文字数: 25k | 阅读时长 ≈ 36 分钟

序言

  随着业务数据量不断增长,单表数据量过大容易带来索引膨胀、查询变慢、写入压力集中等问题。当数据规模达到一定程度后,分库分表就成为常见的数据库水平扩展方案。

  但真正开始接触 ShardingSphere 后,很多人会发现,分库分表本身并不难,难的是理解它背后的路由模型:什么是逻辑库、物理库、逻辑表和物理表?分片键应该如何选择?分片策略和分片算法到底有什么区别?为什么同样是一个 employee_id,既可以用于分库,又可以用于分表?Standard、Complex、Hint、Inline、None 这些策略又分别解决什么问题?

  更进一步,当 SQL 中出现 =、IN、BETWEEN、> 等不同条件时,ShardingSphere 又是如何识别分片条件,并最终计算出应该访问哪些库、哪些表的?

  本文不单纯从配置项出发,而是尝试沿着一条完整的「分片概念 → 分片策略 → 分片算法 → SQL 路由 → 版本演进 → 实战案例」路径,把 ShardingSphere 的分片机制串起来理解。文章还会结合 GPS 轨迹这类典型的大数据量业务场景,演示员工维度、时间维度以及复合维度下的不同分库分表方案,并进一步讨论实际设计中容易出现的分片空洞、数据分布不均以及库表如何合理组合等问题。

  希望通过这些案例,最终建立起一个整体认知,能够从“数据为什么要这样路由”的角度理解它的设计。

阅读全文 »

江河分流:分库分表之基础

发表于 2026-03-22 | 更新于 2026-09-18 | 分类于 关系型数据库
本文字数: 14k | 阅读时长 ≈ 20 分钟

序言

  在业务发展的早期,一个 MySQL 数据库通常就可以满足系统的需求。数据量增加了,可以优化 SQL、增加索引;读请求增加了,可以通过主从复制和读写分离分摊压力。

  但是,这些方案并不能无限解决问题。

  当单表数据量越来越大,单库的 CPU、内存、磁盘、IO 等资源逐渐达到瓶颈时,就需要考虑从数据库架构层面进行拆分,也就是分库分表。

  分库分表本身并不复杂,真正复杂的是拆分之后的问题。

  数据应该按照什么策略拆分?主键如何保证全局唯一?事务如何处理?SQL 如何路由?跨库 JOIN 和分页怎么办?一个已经运行多年的系统,又应该如何完成数据迁移和流量切换?

  因此,分库分表并不是简单地将“一张表变成多张表”,而是一项完整的数据库架构改造。

  本文将从分库分表的基本概念开始,介绍分库分表的拆分方式、适用场景、分片策略、ShardingSphere-JDBC 的使用,以及生产环境中的完整拆分流程。

阅读全文 »

Docker 网络初探

发表于 2026-03-07 | 更新于 2026-08-26 | 分类于 Ops
本文字数: 15k | 阅读时长 ≈ 22 分钟

序言

  随着容器化和微服务架构在企业中愈发普及,Docker 已成为现代应用交付的核心工具。然而,很多团队在成功将应用容器化之后,仍对 Docker 的网络机制感到困惑。尤其在生产环境中,我们常常会遇到一些实际问题,例如:

  • 容器之间如何高效互通?
  • 容器存在几种网络模式?
  • 服务应该选择何种模式?

  网络是容器运行的基础,不同的 Docker 网络模式直接影响着 通信方式、性能、安全性以及系统的扩展能力。网络选择不当,可能导致端口冲突、性能瓶颈、架构复杂化,甚至潜在的安全风险。

  本文将从实践角度出发,对 Docker 的各种网络模式进行系统梳理,并结合典型业务场景,提供切实可行的选型和部署策略。无论你是开发人员还是运维工程师,都能从中获得指导,帮助你在容器化架构设计中做出更合理、更高效的网络决策。

阅读全文 »

(术)MySQL 最佳实践

发表于 2026-01-13 | 更新于 2026-10-15 | 分类于 关系型数据库
本文字数: 6.3k | 阅读时长 ≈ 9 分钟

序言

  在 MySQL 的日常运用中,可能会遇到一些问题,针对这些问题,我们可以根据具体的业务来分析,选择不同的解决方案。

阅读全文 »

Claude Code

发表于 2025-12-21 | 更新于 2026-08-27 | 分类于 开发工具
本文字数: 7k | 阅读时长 ≈ 10 分钟

序言

  Claude Code 将大语言模型带入终端,让 AI 真正成为开发中的协作伙伴。但它的价值取决于你是否懂得管理上下文、善用记忆与自定义命令,并理解规划与思考模式的适用场景。

  本文从安装开始,系统介绍 Claude Code 的核心用法:上下文管理、代码修改、对话控制、记忆文件、自定义命令以及 MCP 服务器扩展。内容注重可操作性,配以大量实例,帮助你快速将 Claude Code 融入真实项目。

  无论你是初次接触,还是希望优化现有工作流,这篇指南都值得一读。

阅读全文 »

神兵利器:文件双向同步工具──Unison

发表于 2025-10-14 | 分类于 开发工具
本文字数: 2k | 阅读时长 ≈ 3 分钟

序言

  在日常的开发与文件管理工作中,我们可能需要在两个不同目录之间保持内容一致。例如,我们希望在多处维护同一份资料,避免手动复制带来的麻烦与风险。

  macOS 提供了强大的文件系统机制,但默认并不具备实时、双向同步的功能。Unison 正是在这种需求下脱颖而出的高效工具。它轻量、跨平台、可配置性强,能够在两个目录间实现真正的双向同步:无论哪一方发生变化,另一方都能自动更新,保持内容完全一致。

  本篇文章将从零开始,带你系统了解如何在 macOS 上安装、配置并运行 Unison,实现如下目标:

  • 🧩 在两个独立目录(A 与 B)间保持实时同步;
  • 🔁 自动检测文件的新增、修改与删除;
  • 🧱 在发生冲突时自动判断或提示处理;
  • ⚙️ 支持后台常驻运行、定时任务或实时监听模式;
  • 🧾 提供详细的命令说明与一键启动脚本。

  通过本教程,你将掌握一套稳定、安全且可扩展的文件同步方案,无论是用于开发环境镜像、资料备份,还是项目文件共享,都能高效、可靠地运作。

阅读全文 »
12…16
LeeQingShui

LeeQingShui

155 日志
17 分类
72 标签
RSS
© 2018 – 2026 LeeQingShui | 站点总字数: 1.1m
赣 ICP 备 2022002212 号
本站已运行
本站总访问量 次 | 本站访客 人次
0%