当前位置: 首页 > 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.dtcms.com/a/326702.html

相关文章:

  • 【C++竞赛】核桃CSP-J模拟赛题解
  • 提示词工程实战:用角色扮演让AI输出更专业、更精准的内容
  • vagrant和itamae怎么配合使用? (放弃)
  • 33Nginx模块的从配置与优化
  • 如何使用curl编程来下载文件
  • MacBook 本地化部署 Dify 指南
  • AIDL简单使用
  • 【接口自动化测试】---YAML、JSON Schema
  • 逐际动力开源运控 tron1-rl-isaacgym 解读与改进
  • VMD例程(Matlab 2021b可直接使用)
  • 从“目标烂尾”到“100%交付”:谷歌OKR追踪系统如何用“透明化+强问责”打造职场责任闭环
  • 小白入门指南:Edge SCDN 轻松上手
  • Dify 从入门到精通(第 28/100 篇):Dify 的多租户架构
  • 【学习嵌入式day-21-Linux编程-shell命令】
  • 第九篇:调试工具:Three.js Inspector使用
  • 武汉火影数字|VR大空间是什么?如何打造VR大空间项目
  • 【华为机试】648. 单词替换
  • SciChart图形库应用
  • 专题:2025人形机器人与服务机器人技术及市场报告|附130+份报告PDF汇总下载
  • TCGA数据集下载工具gdc-client下载慢解决方案
  • mysql参数调优之 innodb_buffer_pool_size和innodb_buffer_pool_instances (三)
  • Java AI生成长篇小说的实用
  • VirtualBox虚拟机网卡配置
  • NR,LTE基于CSI的PMI-RI码本选择
  • 【算法训练营Day23】贪心算法part1
  • nginx高新能web服务器
  • UVM验证—UVM 简述
  • 从0-1搭建webpack的前端工程化项目
  • MySQL杂项
  • OpenBMC中phosphor-dbus-interfaces深度解析:架构、原理与应用实践