redis获取数据慢_Redis Conf 2020之提高Redis访问速度最佳实践

9b4f9f391c4612b9fd49827e915c2dec.gif

b7bd99900b27c1c9bd3fbd46e89c138c.png

来源:Zohaib Sibte Hassan from Doordash and RedisConf 2020 organized by Redis Labs 翻译:Wen Hui

1.Cache stampede问题:

Cachestampede问题又叫做cache miss storm,是指在高并发场景中,缓存同时失效导致大量请求透过缓存同时访问数据库的问题。

bd6a7f919505338736a0e853da56ceb8.png

如上图所示:

服务器a,b 访问数据的前两次请求因为redis缓存中的键还没有过期,所以会直接通过缓存获取并返回(如上图绿箭头所示),但当缓存中的键过期后,大量请求会直接访问数据库来获取数据,导致在没有来得及更新缓存的情况下重复进行数据库读请求(如上图的蓝箭头),从而导致系统比较大的时延。另外,因为缓存需要被应用程序更新,在这种情况下,如果同时有多个并发请求,会重复更新缓存,导致重复的写请求。

714859280368e8a0710329b56fbcb0a6.png

针对以上问题,作者提出一下第一种比较简单的解决方案,主要思路是通过在客户端中,通过给每个键的过期时间引入随机因子来避免大量的客户端请求在同一时间检测到缓存过期并向数据库发送读数据请求。在之前,我们定义键过期的条件为:

Timestamp+ttl > now()

现在我们定义一个gap值,表示每个客户端键最大的提前过期时间,并通过随机化将每个客户端的提前过期时间映射到 0到gap之间的一个值, 这样以来,新的过期条件为:

Timestamp+ttl +(rand()*gap)> now()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值