【Redis】缓存三大标题与缓存同等性标题
缓存三大标题缓存穿透
缓存穿透是指用户查询的数据在缓存和数据库中都不存在,导致每次哀求都会直接落到数据库上,增长数据库负载。
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvYjdkOGZjOTkzMTEyOWI3NmRjYzE2ZTU3M2NkNzY5MzgucG5n
办理方案
1)参数校验
一些不合法的参数哀求直接抛出非常信息返回给客户端。比如查询的数据库 id 不能小于 0、传入的邮箱格式不对的时间直接返回错误消息给客户端等等。
2)缓存无效 key
如果缓存和数据库都查不到某个 key 的数据就写一个到 Redis 中去并设置逾期时间,详细下令如下:SET key value EX 10086 。这种方式仅能办理哀求的 key 变革不频仍的情况。
3)布隆过滤器
把全部大概存在的哀求的值都存放在布隆过滤器中,当用户哀求过来,先判定用户发来的哀求的值是否存在于布隆过滤器中。不存在的话,直接返回哀求参数错误信息给客户端,存在的话才会走下面的流程。
4)接口限流
根据用户大概 IP 对接口举行限流,对于非常频仍的访问举动,还可以采取黑名单机制,比方将非常 IP 列入黑名单。
缓存击穿
缓存击穿是指热门数据在缓存逾期后,大量哀求同时查询该数据,导致哀求直接落到数据库上,刹时对数据库造成巨大压力。
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvMWUwMGI2ZDA3OGVkNGIzOTExZTRlMGNjZGZlYzhiNjYucG5n
办理方案
[*] 针对热门数据提前预热,将其存入缓存中并设置公道的逾期时间比如秒杀场景下的数据在秒杀竣事之前不外期。
[*] 查询缓存逾期后,先获取互斥锁,然后再将数据库中的数据写入到缓存中,包管只有一个哀求会落到数据库上,镌汰数据库的压力。
[*] 缓存中添加一个逻辑逾期字段,如果查询到缓存逾期,先获取互斥锁,然后开启一个新线程重构缓存逾期时间,其他线程如果获取互斥锁失败,直接返回逾期数据,从而镌汰到达数据库的哀求。
缓存雪崩
缓存在同一时间大面积的失效(大概是Redis宕机或缓存大面积逾期),导致大量的哀求都直接落到了数据库上,对数据库造成了巨大的压力。
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvZTVmNWI3ZmRlZjRjNmM2M2Q4ZDcyZTQ4NDBiMGUyNmYucG5n
办理方案
1)针对 Redis 服务不可用的情况:
[*]集群摆设: 采取 Redis 集群,克制单机出现标题整个缓存服务都没办法利用。
[*]限流与降级:对哀求举行限流,防止大量哀求同时落到数据库上。同时,在缓存不可用时,可以返回默认值或举行降级处理处罚。
[*]利用多级缓存架构:团结本地缓存和分布式缓存,镌汰对分布式缓存的直接依赖。在缓存失效时,起首查询本地缓存,如果没有,
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金
页:
[1]