蓝盟IT外包,分库分表实战:激流勇进-千万级数据优化的缓存

发布者:上海IT外包来源:http://www.lanmon.net点击数:1281

蓝盟IT小贴士,来喽!
故障诊断
然后,我们接受了这个任务。 然后,我们根据DBA给定的慢sql,去查看有关此sql的日志。 然后,结合监视,最后这个sql平时一直很稳定,但在高峰时期,这个sql偶尔需要超过2s的时间。
此时,如果查看订单数据库所在物理机的资源占用情况,就会发现高峰时期该物理机的资源利用率非常高,CPU和内存利用率很高,这几乎就确定了原因。
简言之,在高峰时段,大量请求会流向名为MySQL的查询数据,此时大量请求会集中在数据库上。 然后,数据库所在计算机的CPU和内存利用率急剧上升,最终导致MySQL查询的效率极端低下。
leader在了解情况后表示:“实际上,数据库查询之所以慢,并不一定是因为MySQL数据量大。 例如,在当前情况下,明显有大量的请求集中在数据库上,数据库负载较大,数据库查询效率大大降低。 此时,实际上需要在MySQL之前添加缓存进行通信量的峰值切断,使MySQL能够稳定地完成查询”。
leader拨了一点,我们吃了一惊。 原来是这样啊。 说白了,此时,我们可以添加一些缓存,以消除MySQL的流量高峰。 添加缓存后的运行过程大致如下。
这意味着,在标准请求过程中,用户的请求会命中数据库,但在添加缓存后不是此过程。 此时,请求可以直接从缓存中获取数据并返回。 在这种情况下,可以减少后续进程(如查询数据库操作)的处理,有效地减少数据库负载。
简言之,通过使用缓存接受大量查询请求,达到流量高峰化的效果,降低数据库负载,使MySQL稳定高效地完成查询,从而完美解决了MySQL高峰时查询时间激增的问题
缓存非常有用,但在使用缓存时,必须关注缓存的命中率。 命中率=返回正确结果的次数/请求缓存次数。 命中率是衡量缓存有效性的重要指标,命中率越高表示缓存利用率越高。
除了关注缓存命中率外,还应了解缓存中的空策略,如FIFO  (首次发现)、lessfrequentlyused  (已拒绝)和最近的LRU  (已放弃)如何提高缓存命中率
我刚才也说过,命中率是衡量缓存有效性的重要指标。 那么,如何提高缓存命中率?
其实要提高缓存命中率,有很多需要考虑的地方。 大致有以下几点。
1 .选择合适的业务场景
首先,缓存适合读写少的场景,访问频率越高命中率也越高,因此优选高频访问的场景。
2 .适当设置缓存容量
如果缓存容量太小,则Redis内存销毁机制将启动,某些缓存密钥将被删除,缓存命中率将降低,因此必须正确设置缓存容量。
3 .控制缓存粒度
缓存粒度越小,缓存命中率越高。 这是因为单个key的数据单位越小,缓存越难更改。
4 .灵活设置缓存key的有效期
在此,为了防止缓存同时过期,如果缓存同时过期,则如果此时有多个查询请求,这些请求将命中数据库。 这被称为缓存击穿,会增加数据库的压力。
5 .避免缓存直通
我们先研究一下缓存命中率。 例如,当请求来检查数据时,如果在缓存中找不到该数据,则表示未命中缓存。 如果大量查询请求在缓存中几乎找不到数据,则缓存命中率可以说很低。
如果缓存命中率较低,则在缓存中找不到数据,因此请求会命中数据,并向数据库查询数据。 如果在数据库中找不到数据,则说明该请求已穿透缓存。
如果缓存被穿透,大量请求蜂拥而至,如果未命中缓存,大量请求就会涌向数据库,数据库处理请求的能力有限。 此时,数据库可能会因请求量激增的压力而瘫痪,如果数据库瘫痪,则很可能会演化为高速缓存雪崩,导致整个系统大规模瘫痪。 这是非常可怕的。
因此,为了避免发生缓存直通,必须事先制定驱动器计划。 例如,当查询请求到来时,如果没有在缓存中查询数据,则也没有在数据库中查询数据。 在这种情况下,在缓存中为此查询请求设置一个空对象,然后请求将带着该空对象返回。
当同一查询的请求下次到达时,可以直接命中缓存中的空对象,这样请求就不会涌向数据库。 这样,即使在大量请求蜂拥而至时,缓存命中率也很高,并解决了缓存直通问题。
6 .进行缓存预热
通常,第一个查询的请求命中数据库。 因此,如果将数据库中的数据加载到缓存中,也就是预热缓存,则第一个查询的请求也可以按原样进入缓存。如果以上几点顺利的话,缓存命中率自然会上升。 好了,我不会再多说了。 一起实战缓存,体验一下添加缓存的查询的效果吧。
现金实战
方案介绍:历史订单查询
由于已完成订单的状态不会更改,因此历史订单查询将在redis中缓存查询结果并将过期时间设置为1小时。 因此,在缓存失效之前,如果用户再次查询历史订单,则会直接请求redis,从而减少数据库压力
未添加缓存的查询时间
Redis优化思路
在查询历史订单时,首先检查redis中是否有缓存。 如果有,直接返回redis的数据。 如果没有,则检查MySQL并返回查询的数据。 同时将查询结果设置为高速缓存,以便下一个查询退出高速缓存。
高速缓存密钥生成规则
用户id页码页数生成redis  Key
文/上海蓝盟  IT外包专家
IT外包
>
400-635-8089
立即
咨询
电话咨询
服务热线
400-635-8089
微信咨询
微信咨询
微信咨询
公众号
公众号
公众号
返回顶部