Redis05_应用问题

缓存穿透问题:

特点: 查询太多新的没有的数据,多次请求mysql导致崩溃
在这里插入图片描述

缓存击穿问题:

特点: 多次请求热点key, 热点key正好过期,这个时候会大量请求直接访问数据库,导致崩溃

在这里插入图片描述

缓存雪崩问题:

特点: 同一时间内,导致大量key过期,同时请求数据库;

在这里插入图片描述

分布式锁问题:

问题描述: 单纯的Java API并不能提供分布式锁的能力,只能实现在同一机器上实现锁

分布式锁主流的实现方案:

  1. 基于数据库实现分布式锁
  2. 基于缓存(Redis等)
  3. 基于Zookeeper

每一种分布式锁解决方案都有各自的优缺点:

  1. 性能:redis最高
  2. 可靠性:zookeeper最高
    这里,我们就基于redis实现分布式锁。

实现:
注意:
问题1: 只设置一个锁,如果出现故障的情况, 会导致全部堵塞

解决 : 设置过期时间

问题2: 设置完锁之后,出现故障, 导致没有设置过期时间?

解决: 使用 set lock “OK” NX EX 30 命令实现 原子性操作
参数解释:
EX : 设置过期时间为秒数
PX: 设置过期时间为毫秒
NX: 当key不存在时,对其操作
XX: 当key存在时,对其操作

问题3: 当去删除锁的时候,过期时间正好到, 会释放掉刚刚抢到锁的机器的锁的问题?

解决: 将lock的值设置 为一个随机生成的uuid,如果uuid与之前相同, 进行删除, 如果不同不进行删除

问题4:
在这里插入图片描述

解决: 添加原子性操作, 使用lua脚本

猜你喜欢

转载自blog.csdn.net/First_____/article/details/120124430