Redis缓存击穿解决方案(分布式锁)

缓存击穿: 是指对于一些设置了过期时间的key,如果这些key可能会在某些时间点被超高并发地访问,是一种非常“热点”的数据。这个时候,需要考虑一个问题:如果这个key在大量请求同时进来之前正好失效,那么所有对这个key的数据查询都落到db,我们称为缓存击穿。

与缓存雪崩的区别:

1. 击穿是一个热点key失效

2. 雪崩是很多key集体失效

解决:锁

使用分布式锁

使用Redisson解决分布式锁

2.1 本地锁的局限性

之前,我们学习过synchronized及lock锁,这些锁都是本地锁。接下来写一个案例,演示本地锁的问题

就是使用集群(同一个服务,不同端口)的时候本地锁锁不住

分布式锁基本实现方式

1.1基于数据库实现分布式锁

性能略低!

1.2基于缓存(Redis等)

性能搞!

1.3基于Zookeeper

可靠性高!

针对我们电商项目:性能搞!采用Redis!

需要的命令

setnx  当不存在的时候创建key v键值对,返回1,存在返回0

del  表示删除当前key

基本实现。

问题:setnx刚好获取到锁,业务逻辑出现异常,导致锁无法释放

解决:设置过期时间,自动释放锁。

 但是这个方案有问题,也就是执行逻辑时候过期了,别人进来创建一个锁,此时会释放别人的锁

跟多信息看07商品详情进阶doc 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CV工程湿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值