• Redis缓存


    性能瓶颈解决思路
    硬件层面:机器扛得住

    架构设计:做好服务拆分

    代码层面:做好缓存、削峰、解耦

    1. 数据库:读写分离、分库分表

    2. 监控:熔断、限流、降级

    总结

    事前:Redis 高可用,主从+哨兵,Redis cluster,避免全盘崩溃。
    事中:本地 ehcache 缓存 + Hystrix 限流+降级,避免MySQL 被打死。
    事后:Redis 持久化 RDB+AOF,一旦重启,自动从磁盘上加载数据,快速恢复缓存数据。
    数据库绝对不会死,限流组件确保了每秒只有多少个请求能通过。 只要数据库不死,就是说,对用户来说,3/5 的请求都是可以被处理的。 只要有 3/5 的请求可以被处理,就意味着你的系统没死,对用户来说,可能就是点击几次刷不出来页面,但是多点几次,就可以刷出来一次。

    这个在目前主流的互联网大厂里面是最常见的,你是不是好奇,某明星爆出什么事情,你发现你去微博怎么刷都空白界面,但是有的人又直接进了,你多刷几次也出来了,现在知道了吧,那是做了降级,牺牲部分用户的体验换来服务器的安全,可还行?

    出bug了,大家一定要理解是怎么发生的,以及是怎么去避免的,发生之后又怎么去抢救,你可以不是知道很深入,但是你不能一点都不去想,

    测试关注点:

    引入缓存之后就还要考虑缓存击穿、雪崩、热点一系列的问题了

    缓存概述

    核心作用:加快取用的速度

      缓存作为高性能的代表,在某些特殊业务可能承担90%以上的热点流量。对于一些活动比如秒杀这种并发QPS可能几十万的场景,引入缓存事先预热可以大幅降低对数据库的压力,10万的QPS对于单机的数据库来说可能就挂了
    

    缓存选型

    在项目中使用redis做为缓存,还没有使用memcache,考虑因素主要有两点:
    1.redis丰富的数据结构,其hash,list,set以及功能丰富的String的支持,对于实际项目中的使用有很大的帮忙。(可参考官网redis.io)
    2.redis单点的性能也非常高效(利用项目中的数据测试优于memcache).
    作者:欣然 链接:https://zhuanlan.zhihu.com/p/112885553 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    场景预设-秒杀系统

    预热商品信息:可以提前缓存提供查询服务
    库存数据:可以提前缓存,下单流程可以完全走缓存扣减,秒杀结束后再异步写入数据库。

    热key

        有几十万的请求去访问redis上的某个特定key,那么这样会造成流量过于集中,达到物理网卡上限,从而导致这台redis的服务器宕机引发雪崩
    

    针对热key的解决方案:

    提前把热key打散到不同的服务器,降低压力
    加入二级缓存,提前加载热key数据到内存中,如果redis宕机,走内存查询

    缓存击穿

    单个key并发访问过高,过期时导致所有请求直接打到db上

    缓存穿透

    缓存穿透是指查询不存在缓存中的数据,每次请求都会打到DB,就像缓存不存在一样。
    解决方案:

    加一层布隆过滤器

    缓存雪崩

    大量的请求进来直接打到DB上,这样可能导致整个系统的崩溃,称为雪崩。雪崩和击穿、热key的问题不太一样的是,他是指大规模的缓存都过期失效了。
    解决方案:

    针对不同key设置不同的过期时间,避免同时过期
    限流,如果redis宕机,可以限流,避免同时刻大量请求打崩DB
    二级缓存,同热key的方案。

  • 相关阅读:
    分时区查询问题解决
    .htaccess伪静态实例分享
    net mvc 小目标
    PHP中钩子函数的实现与认识
    session
    修改net基本三层 动软生产
    格式化问题
    数据字典
    关联数据和formatter问题-easyui+微型持久化工具
    说说JSON和JSONP,也许你会豁然开朗
  • 原文地址:https://www.cnblogs.com/mmfox/p/15036636.html
Copyright © 2020-2023  润新知