
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
缓存击穿问题是程序员在应用缓存功能的时候会经常遇到的一个问题,而本文我们就通过案例分析来简单了解一下,软件开发缓存击穿问题与解决方案。
高并发流量,访问的这个数据是热点数据,请求的数据在DB中存在,但是Redis存的那一份已经过期,后端需要从DB从加载数据并写到Redis。
关键字:单一热点数据、高并发、数据失效
但是由于高并发,可能会把DB压垮,导致服务不可用。
缓存击穿解决方案
过期时间+随机值
对于热点数据,我们不设置过期时间,这样就可以把请求都放在缓存中处理,充分把Redis高吞吐量性能利用起来。
或者过期时间再加一个随机值。
设计缓存的过期时间时,使用公式:过期时间=baes时间+随机时间。
即相同业务数据写缓存时,在基础过期时间之上,再加一个随机的过期时间,让数据在未来一段时间内慢慢过期,避免瞬时全部过期,对DB造成过大压力
预热
预先把热门数据提前存入Redis中,并设热门数据的过期时间超大值。
使用锁
当发现缓存失效的时候,不是立即从数据库加载数据。
而是先获取分布式锁,获取锁成功才执行数据库查询和写数据到缓存的操作,获取锁失败,则说明当前有线程在执行数据库查询操作,当前线程睡眠一段时间在重试。
这样只让一个请求去数据库读取数据。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。