首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

缓存篇之缓存技巧

在高并发访问场景下,使用多级多层次的缓存技术,可以更加快速、高效的响应客户端的访问,同时服务端可以承载更大的访问量。在整个【高并发技术系列】中,本篇属于《缓存篇》中的「缓存技巧」部分,介绍高并发场景下,实战中如何处理遇到的缓存问题

实战中的缓存问题

之前的三篇文章介绍了线程缓存、本地缓存、分布式缓存及三种缓存的实践方式,但是在高并发情况下还是会存在一些问题,比如下面几个问题:

1.缓存穿透,恶意访问或者大量访问冷门数据,导致数据请求越过缓存服务,大量请求直接访问到数据库服务;

2.缓存雪崩,因大量缓存KEY设置时间相近,在同一时间缓存失效,导致大量数据库连接产生。

3.缓存并发,某一商品瞬间成为爆品,访问量急剧增加,该数据的缓存存储所在的服务节点压力瞬间增大,端口占满,压垮缓存服务器。

以上问题,即使使用了线程缓存、本地缓存、分布式缓存,也会因为处理不当,导致服务宕机。那下面来看看如何解决这些问题。我个人理解线程缓存、本地缓存、分布式缓存是通过技术方式支撑高并发访问,当遇到缓存穿透、缓存雪崩、缓存并发问题的时候,就需要通过合理的策略方式应对了。正常访问如下图:

图 0-0-0

解决缓存三大问题的策略

1.针对缓存穿透有2种处理策略

1.1数据访问标记,当访问数据在缓存中不存在时,依据缓存key增加访问db标记,然后读取db数据。比如key=item_sku_9969636在三级缓存中查询不到时候,向分布式缓存中新增一个key=item_sku_9969636_num的数据value=1,然后向数据库读取数据后放入缓存,并删除key=item_sku_9969636_num。在此期间再有访问key=item_sku_9969636时候,发现该key无数据,且key=item_sku_9969636_num对应数据value=1,则直接返回数据&&,代表无数据。这样可以避免大量同key请求访问数据库。

1.2异步写入缓存,当访问数据在缓存中不存在时,则直接返回数据&&,并启动异步线程读取数据库写入缓存。

2.针对缓存雪崩处理策略

正常来说,同一个业务逻辑下,会有多个key存在的,因此在给多个key设置缓存时间时多增加一个随机数大约在10~60秒直接,这样可避免多个key同时失效,并发访问数据库的情况。

3.针对缓存兵法处理策略

这个问题是特别容易被忽略的问题,一旦出状态那就是大事,血与泪的经验教训。当在设置缓存时,将同一个key设置成多个,如何设置成多个呢?在key后增加随机数,比如key=item_sku_9969636,在这个key后面随机增加0~2,这样一个key就成了三个,key=item_sku_9969636_0、key=item_sku_9969636_1、key=item_sku_9969636_2,三个key是不容易全部分布在一个缓存服务节点上的,虽然牺牲了缓存空间,但是有效避免了热key情况下的缓存服务节点的压力。

本篇介绍了缓存实战中的三大问题及处理策略,下篇将介绍具体的编码实现。

曾梦想仗剑走天涯,看尽这人间繁华。昔已逝,然吾心之所向,提三寸锋芒,亦可破碎亘古不变的迷茫!骚年们,加油!!!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190513A0ONAD00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券
http://www.vxiaotou.com