当前位置: 首页 > news >正文

北京JAVA基础面试30天打卡07

1. 缓存三大问题及解决方案

问题场景后果常用解决方案
缓存穿透请求的数据在缓存和数据库中都不存在(恶意攻击或查询异常 ID)每次请求都会打到数据库,导致 DB 压力骤增- 缓存空值(短期缓存不存在的 key)
- 布隆过滤器(提前判断 key 是否存在)
- 接口参数校验、限流
缓存击穿热点 key 过期瞬间,大量请求同时访问同一时间大量请求打到数据库,可能压垮 DB- 互斥锁 / 分布式锁(第一个请求构建缓存,其它等待)
- 逻辑过期(业务侧判断过期,异步更新)
- 提前刷新缓存
缓存雪崩大量 key 在同一时间过期(比如统一设置了相同 TTL)瞬时缓存失效,所有请求直达 DB,造成雪崩- 过期时间随机化(TTL + 随机值)
- 多级缓存(本地缓存 + 分布式缓存)
- 限流 + 服务降级

2. 如何保证 Redis 的高并发

Redis 本身是单线程处理命令(IO 多路复用 + 内存操作快),但要在高并发场景下保持性能,需要从以下几方面优化:

网络层优化

使用 pipeline 批量发送命令减少 RTT

合理配置连接池,避免频繁建立连接

数据结构选择

选择合适的 Redis 数据类型(如 hash 存储对象、zset 排序等)减少 key 数量

避免大 key(拆分成多个小 key)

分片与集群

使用 Redis Cluster 做数据分片,分摊 QPS 压力

业务端可做读写分离(主写,从读)

热点 key 优化

本地缓存(Caffeine / Guava)+ Redis 二级缓存

预热热点数据,减少直接访问 DB

持久化与备份

结合 RDB + AOF(混合持久化)减少阻塞

合理调优 save、appendfsync 等参数

3. Redis 如何保证原子性

Redis 的原子性是依赖其单线程命令执行模型,以及事务机制:

单命令天然原子性

Redis 单线程按顺序执行命令,不会被中断

例如 INCR key、HSET key field value 是天然原子操作

事务(MULTI/EXEC)

将多个命令放到事务中执行,保证要么全执行,要么都不执行(但事务内命令不会回滚)

Lua 脚本

使用 EVAL 在服务端执行一段 Lua 脚本,脚本中所有操作是原子性的

常用于复杂的原子性业务逻辑(如扣库存 + 记录日志)加粗样式

http://www.lryc.cn/news/617287.html

相关文章:

  • Nacos-1--什么是Nacos?
  • 5G NR 非地面网络 (NTN)
  • JVM运维
  • C#(vs2015)利用unity实现弯管机仿真
  • 5G 非地面网络(NTN)最专业的方案
  • CSS accent-color:一键定制表单元素的主题色,告别样式冗余
  • 第2节 大模型分布式推理架构设计原则
  • XX生产线MES系统具体实施方案
  • 【Node.js从 0 到 1:入门实战与项目驱动】1.4 Node.js 的发展与生态(历史版本、LTS 版本、npm 生态系统)
  • CobaltStrike的搭建与使用
  • java基础概念(二)----变量(附练习题)
  • 【代码随想录day 17】 力扣 617.合并二叉树
  • 零外围双Buck 2C和2C1A!功率分配So Easy
  • Jmeter使用第二节-接口测试(Mac版)
  • MyBatis执行器与ORM特性深度解析
  • n8n中调用playwright-mcp 项目
  • ansible学习第一天
  • 定义短的魔术数字时小心负数的整型提升
  • Mybatis @Param参数传递说明
  • 三种常见的菜单路由封装方式详解
  • 邬贺铨院士:AI与数字安全融合是数字化建设核心驱动力
  • 算法73. 矩阵置零
  • Dubbo从入门到实战:分布式服务开发指南
  • React18 Transition特性详解
  • Apache IoTDB 全场景部署:跨「端-边-云」的时序数据库 DB+AI 实战
  • 智能制造算力一体机:工业 4.0 时代的算力基建革命
  • WPF之绑定!
  • 源码分析Eino框架工具调用--创建篇
  • 瑞芯微rk3588:yolov8-obb训练实战笔记
  • 云原生环境 Prometheus 企业级监控实战