博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
高性能缓存
阅读量:4117 次
发布时间:2019-05-25

本文共 913 字,大约阅读时间需要 3 分钟。

试用的场景: 读多写少的系统
  • 需要经过复杂运算后得出的数据,存储系统无能为力,比如统计在线用户。
  • 读多写少的数据,存储系统有心无力,比如微博,明星发一条,上千万浏览。
缓存穿透

缓存穿透是指缓存没有发挥作用,业务系统虽然去缓存查询数据,但缓存中没有数据,业务系统需要再次去存储系统查询数据。

  1. 存储数据不存在
  2. 缓存数据生成耗费大量时间或者资源
缓存雪崩

缓存雪崩是指当缓存失效(过期)后引起系统性能急剧下降的情况。缓存雪崩的常见解决方法有两种:更新锁机制和后台更新机制。

缓存热点

缓存热点的解决方案就是复制多份缓存副本,将请求分散到多个缓存服务器上,减轻缓存热点导致的单台缓存服务器压力,不同的缓存副本不要设置统一的过期时间。

满足业务的前提下,缓存方案尽量简单,越复杂的方案越容易出错,到时候各种不一致问题烦死你。

好的缓存方案应该从这几个方面入手设计:

1.什么数据应该缓存

2.什么时机触发缓存和以及触发方式是什么
3.缓存的层次和粒度( 网关缓存如 nginx,本地缓存如单机文件,分布式缓存如redis cluster,进程内缓存如全局变量)
4.缓存的命名规则和失效规则
5.缓存的监控指标和故障应对方案
6.可视化缓存数据如 redis 具体 key 内容和大小

经常说到缓存的时候,面试官问我,数据库自身不是有缓存吗,标准答案是怎么回击他?

以下仅限mysql:

  1. mysql第一种缓存叫sql语句结果缓存,但条件比较苛刻,程序员不可控,我们的dba线上都关闭这个功能,具体实现可以查一下
  2. mysql第二种缓存是innodb buffer pool,缓存的是磁盘上的分页数据,不是sql的查询结果,sql的执行过程省不了。而mc,redis这些实际上都是缓存sql的结果,两种缓存方式,性能差很远。因此,可控性,性能是数据库缓存和独立缓存的主要区别2. mysql第二种缓存是innodb buffer pool,缓存的是磁盘上的分页数据,不是sql的查询结果,sql的执行过程省不了。而mc,redis这些实际上都是缓存sql的结果,两种缓存方式,性能差很远。因此,可控性,性能是数据库缓存和独立缓存的主要区别

转载地址:http://ppypi.baihongyu.com/

你可能感兴趣的文章
【Python】学习笔记——-7.3、继承和多态
查看>>
【Python】学习笔记——-7.5、实例属性和类属性
查看>>
Linux设备模型(总线、设备、驱动程序和类)之四:class_register
查看>>
git中文安装教程
查看>>
虚拟机 CentOS7/RedHat7/OracleLinux7 配置静态IP地址 Ping 物理机和互联网
查看>>
弱类型、强类型、动态类型、静态类型语言的区别是什么?
查看>>
Struts2技术内幕图书 转载
查看>>
Java异常分类
查看>>
项目中的jackson与json-lib使用比较
查看>>
Jackson Tree Model Example
查看>>
j2ee-验证码
查看>>
日志框架logj的使用
查看>>
js-高德地图规划路线
查看>>
常用js收集
查看>>
mydata97的日期控件
查看>>
如何防止sql注入
查看>>
maven多工程构建与打包
查看>>
springmvc传值
查看>>
Java 集合学习一 HashSet
查看>>
在Eclipse中查看Android源码
查看>>