从缓存击穿 看 分布式锁

从缓存击穿 看 分布式锁,第1张

缓存击穿 看 分布式锁

文章目录
    • 缓存击穿
      • 解决方案:
          • 数据库角度
          • 缓存角度
  • 分布式锁

缓存击穿

在我们使用缓存时,会将从数据库里查询到的数据存到缓存中,并设置一个过期时间。就是当一个热点数据过期时,会有大量的访问到数据库中,给数据库造成很大压力,这就是缓存击穿。

解决方案:

那么缓存击穿的解决,我们可以从 缓存 和 数据库两方面入手。

数据库角度

对于数据库来说,就是短时间的大量请求无法承受,那么就让他承受的请求变成 1/100,1/1000,用 锁 可以达到这样的情况,之前 100 个,1000个请求都可以同时读,但是现在有了 锁, 一个线程获取锁去读取数据库,其他线程就等着,这样 数据库的压力就下来了。

用 锁 会降低用户体验,但是这个方式的出发点就是牺牲用户体验,保证数据库不死机。

缓存角度

最简单的,就是热点数据永不过期。
将数据和它的过期时间一起存到缓存中,然后我查询缓存的时候,检查这个数据是否快要过期了,如果快要过期,那么就主动更新缓存,达到永不过期的

分布式锁

我们前面说到了 , 在数据库角度可以使用 锁来解决 。 如果只有一个服务器,那么我们直接在 代码中使用 JAVA 提供 的synchronized ,Lock即可。但是如果我们配置了集群呢,这一个服务有多个服务器,此时,一个服务器只能确保从它去查询数据库的请求有限制。但是多个服务器之间就没法限制了,这时就需要使用分布式锁。
假设使用Redis来做分布式锁,每一个请求都需要去Redis 设置一个值,设置成功才代表拥有了锁,此时,就可以达到多个服务器之间也可以限制对数据库的请求限制

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5637779.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存