几大缓存常用概念

单线程和多路复用

redis最大的特点就是快,快。有几大原因:

  • 基于内存的I/O
  • 数据结构固定,json格式简单易解析。
  • 单线程,不用考虑上下文切换和竞争锁的消耗。
  • 多路I/O复用技术。

要解释单线程和多路复用,就必须从整个操作流程看起。客户端与redis建立连接(多并发)----->网络I/O向服务器发送操作请求------->单线程轮询读取I/O,解析请求,操作redis中数据,返回结果(这个时候是单线程)。

其中多路,就是多网路,即多个并发请求,I/O复用模型是利用 select、poll、epoll 可以同时监察多个流的 I/O 事件的能力,在空闲的时候,会把当前线程阻塞掉,当有一个或多个流有 I/O 事件时,就从阻塞态中唤醒,于是程序就会轮询一遍所有的流(epoll 是只轮询那些真正发出了事件的流),并且只依次顺序的处理就绪的流,这种做法就避免了大量的无用操作。

所以单线程只是读取I/O,解析请求,处理数据的时候是一个线程的。服务本身的正常运作肯定是多个线程共同协作的,此处不可混淆。---此处赵泽仁看过来,哈哈。

缓存雪崩

服务器雪崩:分布式系统都存在这样一个问题,由于网络的不稳定性,决定了任何一个服务的可用性都不是 100% 的。当网络不稳定的时候,作为服务的提供者,自身可能会被拖死,导致服务调用者阻塞,最终可能引发雪崩连锁效应。

缓存雪崩:当缓存服务器重启或者大量缓存集中在某一个时间段失效,这样在失效的时候,也会给后端系统(比如DB)带来很大压力,造成数据库后端故障,从而引起应用服务器雪崩。

解决方案:

  • 避免缓存集中失效,不同的key设置不同的超时时间。
  • 增加互斥锁,控制数据库请求,重建缓存。
  • 提高缓存的HA,如:redis集群。
  • 熔断机制:监控cpu、内存、线程数外,重点监控数据库端的长事务、sql超时等,达到危险值拒绝后续的访问。绝大多数应用服务器发生的雪崩场景,都是来源于数据库端的性能瓶颈,从而先引起数据库端大量瓶颈,最终拖累应用服务器也发生雪崩,最后就是大面积的雪崩。
  • 隔离机制:不同类型的请求使用线程池来资源隔离,每种类型的请求互不影响,如果一种类型的请求线程资源耗尽,则对后续的该类型请求直接返回,不再调用后续资源。这种模式使用场景非常多,例如将一个服务拆开,对于重要的服务使用单独服务器来部署,再或者公司最近推广的多中心。
  • 限流机制:熔断模式和隔离模式都属于出错后的容错处理机制,而限流模式则可以称为预防模式。限流模式主要是提前对各个类型的请求设置最高的QPS阈值,若高于设置的阈值则对该请求直接返回,不再调用后续资源。这种模式不能解决服务依赖的问题,只能解决系统整体资源分配问题,因为没有被限流的请求依然有可能造成雪崩效应。
     

二八定律

网站访问数据的特点大多数呈现在"二八定律":80%的业务访问集中在20%的数据上。这时为了减轻数据的压力和提高网站的数据访问速度,则可以使用缓存机制来优化网站。这20%的数据就是所谓的热数据,其他的数据称为冷数据。

缓存穿透

缓存穿透:是指查询一个一定不存在的数据,由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义。在流量大时,可能DB就挂掉了,要是有人利用不存在的key频繁攻击我们的应用,这就是漏洞。 
key不存在时,大量的数据进来查询DB

解决方案:

  • 将所有可能存在的数据哈希到一个足够大的bitmap中,一个一定不存在的数据会被 这个bitmap拦截掉,从而避免了对底层存储系统的查询压力。

缓存击穿

缓存穿透:在高并发下,多线程同时查询同一个资源,如果缓存中没有这个资源,那么这些线程都会去数据库查找,对数据库造成极大压力,缓存失去存在的意义。

解决方案:

  • 刷新key失效期,可以用定时定期刷新key的失效期,定时管理比较复杂。
  • 失效时利用setnx,获得锁的采取查数据库load数据到缓存,其他只能重试获取redis。

缓存预热

缓存冷启动,redis启动后,一点数据都没有,直接就对外提供服务了,mysql就裸奔。所谓预热就是提前向redis写入数据,可以根据数据的访问统计量进行筛选热数据,不仅启动后写入,也可以实时动态的写入redis。

缓存更新

顾名思义,就是定期清理redis过期数据,除了redis自己的expiretime外,我们可以根据业务来判断该数据是否过期需要清除。

比如访问热门商品,每次访问都可以上报到kafka,用于热点计数,消费kafka进行实时统计,选出topn,写入redis,其他的设置为过期。

降级

降级:就是在高并发高负载情况下,选择动态的关闭一下不重要的服务,拒绝访问等,来为重要的服务节省资源,比如电商平台秒杀当天可关闭推荐等功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值