前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >缓存你问题真不少!

缓存你问题真不少!

原创
作者头像
温安适
修改2021-02-26 17:45:28
5250
修改2021-02-26 17:45:28
举报
文章被收录于专栏:温安适的blog温安适的blog

引言

2021年,2月底,一个超级疲惫的下午,离下班还有30分钟,小航拿了一袋每日坚果,对我说:”温哥,来来来,吃个坚果,开心下”

有了前几次的,经验,我意识到,这兄弟又要问题问题,委婉的回绝到:”谢谢好意,你吃吧,我不饿”。

小航,一看我有所防备,有拿出了安慕希,并且抓住了我的手臂,说道:“大神,我有困惑,请您帮帮我”

看他如此诚恳,我不好意思的说道:“大神不敢当,水平有限,恐无法为你解惑”。

小航一看有戏,有给了我一袋每日坚果,眼中有光的说道:“哥,您指点一二,无论对错,我都愿意听”

我感动(dong xi hao chi)的说:“什么问题,我试试看”

小航立刻说道:“使用缓存都有什么问题”

我缓缓道来:“主要四个问题,击穿,穿透,雪崩,污染”

问题描述

逐个解决

缓存击穿

热点key过期了,请求打到了数据库

解决方式

不给热点key设置过期时间

缓存穿透

缓存没有,数据库也没有。

解决方式

  1. 缓存空值或缓存缺省值
  2. 对入参进行校验,屏蔽无效参数请求
  3. 在redis前置布隆过滤器,快速判断

缓存雪崩

大量key同时失效

给key的过期时间加上随机数,避免同时过期

Redis挂了

  1. Redis,搭建主从集群(提高redis可靠性)
  2. 服务限流(限制访问量,减少redis压力)
  3. 服务熔断(直接返回错误,不在继续往下请求)
  4. 服务降级(redis替代方式,或者直接走库)

缓存污染

有不常用的key占用redis内存。

解决方式:

  1. 如果知道是那个key,直接删除
  2. Redis空间充足,可以考虑不解决
  3. 设置redis过期策略为allkey-lfu

注意是lfu,把访问次数最低的数据淘汰出缓存

Lru,解决不了如下场景:大量数据进行一次全体读取,因为这些被查询的数据刚刚被访问过,所以 lru 字段值都很大,无法淘汰不常用的key

总结

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 引言
  • 问题描述
  • 逐个解决
    • 缓存击穿
      • 解决方式
    • 缓存穿透
      • 解决方式
        • 缓存雪崩
          • 大量key同时失效
          • Redis挂了
        • 缓存污染
          • 解决方式:
      • 总结
      相关产品与服务
      云数据库 SQL Server
      腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档