企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# 我们都知道redis是为了给数据库做挡箭牌的,减轻数据库的压力 ## 1.缓存击穿 高并发时,当一个key非常热点(类似爆款),在不停的扛着大并发,当这个key在失效的一瞬间,持续的大并发直接请求数据库并且设置到缓存中,导致性能下降 解决办法:加锁《同步锁或者分布式锁》 ~~~ public Object index() { Object obj = redisTemplate.boundValueOps("xxxx").get(); if (obj==null){ synchronized (this){ obj = redisTemplate.boundValueOps("xxxx").get(); if (obj!=null){ return obj; } //TODO 查询数据库并添加到缓存中 } } return obj; } ~~~ ### 2.缓存雪崩 缓存集中过期,或者缓存服务器宕机,导致大量请求访问数据库,造成数据库压力过大,宕机 解决方案 1.随机失效 2.redis哨兵模式 ### 缓存穿透 数据库和缓存不存在数据,导致每次请求都去查数据库,这时的用户可能是攻击者,如用户发起id为-1的数据或者id特别大(不存在的数据)导致数据库压力过大或者宕机 解决方案 1.参数校验 2.缓存空对象(设置过期时间) 3.布隆过滤器(白名单或者黑名单)