缓存你问题真不少!
引言
2021年,2月底,一个超级疲惫的下午,离下班还有30分钟,小航拿了一袋每日坚果,对我说:”温哥,来来来,吃个坚果,开心下”
有了前几次的,经验,我意识到,这兄弟又要问题问题,委婉的回绝到:”谢谢好意,你吃吧,我不饿”。
小航,一看我有所防备,有拿出了安慕希,并且抓住了我的手臂,说道:“大神,我有困惑,请您帮帮我”
看他如此诚恳,我不好意思的说道:“大神不敢当,水平有限,恐无法为你解惑”。
小航一看有戏,有给了我一袋每日坚果,眼中有光的说道:“哥,您指点一二,无论对错,我都愿意听”
我感动(dong xi hao chi)的说:“什么问题,我试试看”
小航立刻说道:“使用缓存都有什么问题”
我缓缓道来:“主要四个问题,击穿,穿透,雪崩,污染”
问题描述
逐个解决
缓存击穿
热点key过期了,请求打到了数据库
解决方式
不给热点key设置过期时间
缓存穿透
缓存没有,数据库也没有。
解决方式
- 缓存空值或缓存缺省值
- 对入参进行校验,屏蔽无效参数请求
- 在redis前置布隆过滤器,快速判断
缓存雪崩
大量key同时失效
给key的过期时间加上随机数,避免同时过期
Redis挂了
- Redis,搭建主从集群(提高redis可靠性)
- 服务限流(限制访问量,减少redis压力)
- 服务熔断(直接返回错误,不在继续往下请求)
- 服务降级(redis替代方式,或者直接走库)
缓存污染
有不常用的key占用redis内存。
解决方式:
- 如果知道是那个key,直接删除
- Redis空间充足,可以考虑不解决
- 设置redis过期策略为allkey-lfu
注意是lfu,把访问次数最低的数据淘汰出缓存
Lru,解决不了如下场景:大量数据进行一次全体读取,因为这些被查询的数据刚刚被访问过,所以 lru 字段值都很大,无法淘汰不常用的key
总结
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
转发和重定向
Spring MVC 重定向和转发 重定向和转发 重定向经过客户端,而转发没有,因此相对来说转发更快速。但有时采用重定向更方便,如: 重定向到外部网站; 避免用户重新加载页面时再次调用同样的动作。 return "redirect:/view/"+saveUser.getId(); 这里使用重定向来防止当前用户重新加载页面时'''saveUser'''被二次调用。 但是使用重定向无法轻松地给目标页面传值,因此,在Spring3.1后提供了Flash属性,详情见后文。 <br> 常用处理方式 Controller 视图方法间的跳转,无非就是带参跳转和不带参跳转。常用的方法有通过 String 映射 RequestMapping 实现重定向,或者通过 ModelAndView 对象,又或者是 RedirectView 对象,下面逐一说明。 <br> String 重定向 是 return 映射到另一个 Controller 方法的字符串。如果有请求参数,就拼接在 RequestMapping 映射的字符串后面。 // 返回字符串映射的方式 @RequestMappi...
- 下一篇
技术干货 | mPaaS 小程序高玩带你起飞:客户端预置小程序无视网络质量
传统的小程序技术容易受到网络环境影响,当网络质量不佳时可能导致拉取不到小程序包的情况。通过预置小程序,即可规避该问题。本文介绍了预置小程序的原理和预置小程序的实现过程。 什么是预置小程序 预置小程序是指将小程序的渲染、逻辑、配置等静态资源打包在一个压缩包内,客户端预先下载小程序包到本地、直接从本地加载资源的过程。预置小程序可以最大程度地摆脱网络环境对 mPaaS 小程序页面的影响。使用预置包能够为客户端带来以下优势: 提升用户体验 通过预置包的方式把页面内静态资源嵌入到应用中并随应用一起发布,可以使用户第一次开启应用时即无需依赖网络环境下载资源,可以直接开始使用。 实现动态更新 在推出新版本或紧急发布的时候,可以在小程序 IDE 中进行迭代开发,通过 mPaaS 控制台发布,客户端中集成的小程序 SDK 会自动将小程序更新到最新的版本。这种发布无需通过应用商店审核,可以让用户及早接收到更新。 预置小程序的实现原理 本文从以下方面介绍了预置小程序的实现原理: 小程序预置包的结构 小程序预置包的使用过程 小程序预置包的结构 小程序预置包是一个 .amr 格式的压缩文件,将后缀 amr ...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS6,CentOS7官方镜像安装Oracle11G
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Hadoop3单机部署,实现最简伪集群
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果