2019独角兽企业重金招聘Python工程师标准>>>

为什么使用缓存

一般情况下,在访问量达到一定规模后,数据库的读写会成为一个瓶颈,我们会采用一些手段来对数据库减压,让它可以正常的工作。可以考虑的手段包括读写分离、添加缓存服务器等,读写分离是为了尽量将对数据库的读写动作分开,减少互相之间的影响;添加缓存是为了读库的时候,减少直接读取数据库的动作,将查询的结果存放在缓存中,用户的请求被隔绝在数据库以外,从而减少数据库的压力。

这是一个理想状况下缓存工作的方式,但仅仅是理想

缓存穿透

所谓缓存穿透,是说用户请求在缓存系统中查找结果时候失效,接下来去后端存储系统中查找数据,这个时候,如果数据不存在,而且这个访问也比较大的情况下,大量的访问会直接命中数据库,这时候负责存储的服务器就悲剧了(如果左图),所以我们就需要做一些努力,使得当数据不存在,往缓存中写入一个标志抑或将空的查询结果存入缓存,减少这种无用的请求频繁命中数据库的情况(如右图)

也可以将确认为空或者空的查询结果存储到单独的缓存区域中。

缓存雪崩

这是另外一个问题,当系统使用的缓存发生意外(网络失败、宕机、服务挂掉、缓存集体丢失等等)之后,缓存集体失效,导致短时间内请求都到达数据库(数据存储层),使得数据库压力山大进而crash掉。

为了预防这种情况,我们采用一下几种方式:

1、我们采用多实例的方式来保证缓存的高可用性,尽量避免当个别实例出现问题之后,引起全局缓存的问题。这类方案很多,比如memcache的一致性hash,redis的cluster机制,来避免单点的故障,这类资料可以搜索一下关于redis或者memcache的高可用方案。

2、降级机制。这个方法在很多高可用设计中可能也有描述,简单一点说就是我们将用户与用户之间,资源与资源之间进行隔离,当某一部分数据产生问题之后或者对某一部分的请求到达一个阀值之后,根据预设的机制,对请求只返回热点数据,保证客户端不会产生天窗或者说一直无法响应的问题。

3、加锁。对于到达的请求,我们用锁的机制,来尽量使它们排队处理从而减少对数据库产生并发。可以参考的锁方案有两种,一种是使用全局锁或者字符串锁等方案,是一个请求进行操作的时候,其他的请求处于等待状态,当这个请求处理完毕之后进行下一步的业务处理,但是这样的话如果一个请求挂掉,会对后面排队的请求产生影响,而且请求的处理可能不会短时间处理完毕,会导致请求阻塞的时间过长等问题,第二种方案就是在进行操作的时候,其他请求进来的时候判断是否有锁存在,如果存在直接跳过处理,返回热点数据。

需要说的是降级机制未必要放到图中这个位置,也可以放在缓存之前或其他的位置,它的主要目的是当出现问题时候隔离掉出现问题的资源不影响客户端的内容或者使一部分用户的请求无法到达真正的业务逻辑从而减少业务处理的压力。

友情链接:个人博客,www.whereta.com

转载于:https://my.oschina.net/vincentzhao/blog/657929

关于缓存使用中的一些看法相关推荐

  1. Redis 缓存击穿(失效)、缓存穿透、缓存雪崩怎么解决?

    欢迎关注方志朋的博客,回复"666"获面试宝典 原始数据存储在 DB 中(如 MySQL.Hbase 等),但 DB 的读写性能低.延迟高. 比如 MySQL 在 4 核 8G 上 ...

  2. 企业项目开发--分布式缓存memcached(3)

    此文已由作者赵计刚授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 3.3.ssmm0-data 结构: 3.3.1.pom.xml 1 <?xml version=&q ...

  3. 表格缓存问题_缓存常见问题,一网打尽哦!

    勾哥:昨天发了一篇翻译,英语水平一般般的我抠了半天字眼,一个 word 一个 word 翻译过来,竟然被举报了?! 哈?举报的那位兄弟你是盐吃多么 今天更新一篇缓存的常见问题,对很多开发老哥都能有帮助 ...

  4. 深入分布式缓存之EVCache探秘开局篇(文末赠书)

    深入分布式缓存 读完需要 15 分钟 速读仅需 5 分钟 云服务不仅为软件系统的开发和部署带来了更多的敏捷性,而且提供了更多创新的可能性.当分布式缓存技术遇到云服务会是怎样的情形呢?EVCache 就 ...

  5. 从Memcache转战Redis,聊聊缓存使用填过的“坑”

    " 在高并发场景下,很多人都把 Cache(高速缓冲存储器)当做可以"续命"的灵丹妙药,哪里高并发压力大,哪里就上传 Cache 来解决并发问题. 但有时候,即使使用了 ...

  6. 分布式技术与实战第六课 分布式缓存设计

    第33讲:不止业务缓存,分布式系统中还有哪些缓存? 缓存是分布式系统开发中的常见技术,在分布式系统中的缓存,不止 Redis.Memcached 等后端存储:在前端页面.浏览器.网络 CDN 中也都有 ...

  7. 聊一聊安全且正确使用缓存的那些事 —— 关于缓存可靠性、关乎数据一致性

    大家好,又见面了. 本文是笔者作为掘金技术社区签约作者的身份输出的缓存专栏系列内容,将会通过系列专题,讲清楚缓存的方方面面.如果感兴趣,欢迎关注以获取后续更新. 在上一篇文档<聊一聊作为高并发系 ...

  8. 万字多图:搞懂分布式系统缓存设计

    文章来源:[vivo互联网服务器团队] 目录 缓存简介 缓存的分类 进程内缓存 分布式缓存 多级缓存 缓存问题 缓存策略 总结 缓存简介 | 什么是缓存 缓存就是数据交换的缓冲区.缓存的本质是一个内存 ...

  9. 直播电商源码使用缓存,将面临什么问题

    直播电商源码使用缓存的设计包含很多技巧,设计不当将会导致严重的后果.本文将介绍缓存使用中常见的三大问题,并给出相应的解决方案. 1. 缓存穿透 在大多数直播电商源码中,缓存的使用方式如下图所示: 当业 ...

  10. 什么是DNS缓存?DNS缓存有哪些作用?

    什么是DNS缓存? 当我们第一次访问某个网站时,DNS在返回对应的IP地址后,系统会将这个记录临时存储下来,并为其设定一个有效期限(TTL),在有效期限内再次访问该网站,系统会直接将该结果返回,而无需 ...

最新文章

  1. 二、SpringMVC的常用注解——1-@Controller
  2. Cause: org.postgresql.util.PSQLException: ERROR: column province_id does not exist
  3. .net框架读书笔记---类型成员及其访问限定(一)
  4. 四阶龙格积分法 matlab,matlab控制系统计算机仿真实验-完整版
  5. 日本专家给出的存钱高招(图)
  6. jsp页面跳转(商品管理系统)
  7. 一周第二次课(3月20日)1.6/1.7 配置IP 1.8 网络问题排查
  8. macOS的Fn键实用技巧
  9. python美多商城项目百度网盘_美多商城项目(十)
  10. java手机翻译,使用JUniversal翻译Android项目
  11. sqlalchemy连接和关闭数据库
  12. 张宇1000题高等数学 第十八章 多元函数积分学(二)
  13. 手把手教你Excel数据处理!
  14. 关于RGB888和RGB565互转代码实现方案推荐
  15. 使超星数字图书馆的PDG文件转换为PDF文件的方法
  16. AD7606系列ADC的相关内容
  17. 【Codeforces613D】Kingdom and its Cities【虚树】【Tree DP】
  18. 关于装msdn网站纯净版win7正版授权问题(已解决)
  19. 西部数据绿盘、蓝盘、黑盘、红盘和紫盘的区别
  20. .NET导出Excel(复杂表头)

热门文章

  1. BZOJ 1935: [Shoi2007]Tree 园丁的烦恼
  2. linux下MySQL安装及设置
  3. 网站自动适配技术实现原理
  4. Centos7网络配置
  5. 终于忙完了,要开启代码生涯了
  6. 修改mongodb oplog size
  7. 搭建自己的OwnCloud私有云
  8. Android UI--自定义ListView(实现下拉刷新+加载更多)
  9. CentOS 7搭建tengine+php+mariadb环境并安装discuz论坛
  10. echarts realtime图实现