rides使用问题

1, 缓存穿透

概念:

​ 访问缓存中没有,数据库中也没有的数据,感觉像穿透了缓存层,直达数据库

解决方法:

1,简单粗暴:

​ 查一个不存在的数据时,给一个设置一定过期间的key的数据,存入缓存

2,布隆过滤器:

​ 先把缓存中的数据的key存入到布隆过滤器中

​ 查询缓存前,先判断当前key在布隆过滤器中是否存在: 一定不存在直接返回 ,有可能存在再查询缓存, 没有,再查询数据库

原理:

​ 1、在将数据存入Redis时,会同时存储一个Redis的键到布隆过滤器中 布隆过滤器会通过提供的多个 Hash函数对Key进行Hash运算,再对位数组长度进行取余,得到一个下标,将该下标值设置为1

​ 2、在查询时,会先按存储Redis到布隆过滤器中的方法,去判断当前的Key是否在布隆过滤器中,结果有 两种 一是:一定不存在【位数组对应的下标上有一个或多个是0】,直接返回 。二是:有可能存在【位 数组对应的下标上每个对应值都1】,查Redis

2,缓存击穿

概念:

​ 某一个热点数据的key突然过期,造成大量请求直达数据库

解决方案:

​ 1、热点数据永不过期:设置定时任务,凌晨2点更新缓存数据【先删除缓存中的数据,再查询数据,再写入 缓存】

​ 2、接口限流或者降级

​ 3、分布式锁: 在分布式环境下,传统锁会失效,因为传统锁是基于JVM的使用分布锁可以解决

​ 解决方案:Zookeeper 基于临时序号节点+监听机制

​ Redisson 因为项目本身就有了Redis,虽然性能不如ZK,但是我不用ZK,就不需要动项目的 整体架构,而我们的项目用Redisson实现分布式锁对性能没有那么强的要求。

3,缓存雪崩

概念:

​ 缓存中在同一个时间点有大量的key同时过期,请求查询缓存中没有,直达数据库

解决方案:

​ 1、分布式锁

​ 2、热点数据永不过期

​ 3、key随机过期时间

posted @ 2025-09-19 20:05  mz456  阅读(21)  评论(0)    收藏  举报