Home
工程师部落
Cancel

缓存设计

什么数据可以需要缓存 静态数据: 比如 字典数据 准静态数据: 比如 元数据,地址,商品档案 中间状态数据: 比如配置中心下发的配置数据,比如 静态配置文件(Properties) SQL 语句,用PrepareStatement,用 问号占位符,因为这样SQL解析可以缓存起来 缓存加载策略 启动全量加载: 影响程序启...

据库连接池原理与设计思想

一、为什么需要数据库连接池 数据库连接建立成本非常高: 需要 网络三次握手 + 身份认证 + 权限检查 + 内存结构初始化 单次建立连接可能耗时 5ms~100ms 高并发场景若频繁 open/close connection 会导致系统吞吐急剧下降 连接池目标: 预先建立一定数量的连接保留在池中 应用程序需要时直接从池子获取 用完后不是关闭,而是归还池中...

分布式缓存中,如何解决“缓存穿透、缓存击穿、缓存雪崩”这三大问题

缓存穿透(查询不存在的数据,缓存和DB都不命中,导致DB压力过大): 解决方案: 空值缓存:查询到空结果时,缓存空值(如“null”),设置较短过期时间(如5分钟); 布隆过滤器:将所有存在的key存入布隆过滤器,查询前先校验key是否存在,不存在直接返回; 案例:电商项目中,有黑客恶意查询不存在的商品ID(如1000000),未处...

为什么会有分布式事务?

为什么会有分布式事务? 假设有两个系统,一个是订单系统,另一个是库存系统。 用户在订单系统中下单,已经保存到数据库,订单系统需要调用库存系统的接口来减少库存。因为是两个系统 如果库存系统失败啦,这个时候,订单系统已经保存了数据,但是库存却没有减少。这样就出现问题 所以分布式事务之所以存在,是因为在分布式系统中,单机数据库事务能力无法直接覆盖跨多个服务、多个数据库、多个资源的业务流...

Spring 是什么?

Spring 是什么 轻量级开源框架,核心是 IOC 和 AOP,用于简化 Java 开发。 Spring 的核心 IOC 控制反转 和 AOP 面向切面 DI(依赖注入)是 IOC 的具体实现 AOP 默认对接口用 JDK 动态代理(基于接口反射),对类用 CGLIB 动态代理(基于子类字节码生成) AOP 核心思想:分离业务逻辑与横切关注点,提高代码复用性和可维护性 ...

什么是零拷贝?

什么是零拷贝? 磁盘可以说是计算机系统最慢的硬件之一,读写速度相差内存 10 倍以上,所以针对优化磁盘的技术非常的多,比如零拷贝、直接 I/O、异步 I/O 等等,这些优化的目的就是为了提高系统的吞吐量,另外操作系统内核中的磁盘高速缓存区,可以有效的减少磁盘的访问次数。 为什么要有 DMA 技术? 在没有 DMA 技术前,I/O 的过程是这样的: CPU 发出对应的指令给磁盘控制...

简单MCP Client实现

使用 uv 创建项目和依赖 uv init mcp-client-demo uv add "mcp[cli]" pip install mcp 编写 mcp_client.py from mcp import ClientSession, StdioServerParameters from mcp.client.stdio import stdio_client # Crea...

微服务改造,本质是业务问题驱动的技术决策

一、微服务改造,本质是业务问题驱动的技术决策 “微服务改造其实是个业务问题”,意思是: 微服务的引入不是为了炫技,而是为了解决业务发展过程中出现的问题。 二、如何理解:从三个维度入手 1. 业务驱动架构演进:不是为了“技术时髦” 微服务不是“为了用微服务而微服务”。 它的本质动因往往是: 业务复杂度增加(多个团队并行开发,多业务线拓展) 部署上线要求变高(某个业务需要独立发布、灰度...

实现一个简单的MCP Server

安装 uv && 初始化项目 pip install uv==0.5.24 uv init mcp_demo1 安装依赖 FastMCP cd mcp_demo1 uv add "mcp[cli]" mcp_server 代码实现,使用标准输出 # server.py from mcp.server.fastmcp import FastMCP # 创建一个...

亲缘性线程池