谷粒商城实战(009 缓存-分布式锁)

Java项目《谷粒商城》架构师级Java项目实战,对标阿里P6-P7,全网最强

总时长 104:45:00 共408P

此文章包含第158p-第p165的内容


分布式锁

原理和使用

使用下shell对产生的命令进行发送

查看 -> 撰写 -> 撰写栏


idea 选中的代码提取成方法


加锁和过期时间是一个原子操作 就可以避免死锁




使用lua

也可以全部用lua脚本写分布式锁,这种一半Java代码,一半Redis运行代码,受网络原因影响很大 。网上有基于lua脚本实现的分布式锁 。

原子删锁


怕业务未执行完锁就过期了,可以给过期时间设置长一些 如300秒


redis自己实现分布式锁的最大的问题就是自旋,自旋消耗cpu资源,所以还是得中间件进行阻塞,比如zookeeper。

ZooKeeper 可以作为解决自旋问题的一种工具或组件的一部分。在分布式系统中,如果多个节点或线程需要协调访问某个共享资源,可以借助 ZooKeeper 提供的分布式锁机制来解决自旋问题。

具体来说,当一个节点或线程需要访问共享资源时,它可以尝试获取一个分布式锁。如果锁已经被其他节点或线程持有,那么它可以选择在获取锁之前自旋一段时间,等待锁释放。当锁释放时,它再次尝试获取锁。如果自旋等待的时间过长,也可以选择放弃自旋,暂时释放 CPU 控制权,并稍后再次尝试获取锁。

总的来说,虽然 ZooKeeper 本身并不直接解决自旋问题,但它提供了一种分布式锁的实现,可以帮助分布式系统中的节点或线程协调访问共享资源,从而间接地解决自旋问题。

使用更专业的Redisson进行分布式锁操作



第二个带配置,我们使用第一个原生的








单元测试

可重入锁

注入的变量名称最好可以和配置类里的名称(组件ID)一样(不一样也可以)

继承了juc包下的Lock类

阻塞式等待,不需要自旋了

(无锁自旋和重量级锁)


使用了redis的看门狗 会自动续期


redis 看门狗原理


这里看不懂应该去学习手动使用redis实现分布式锁,框架是对手动的封装,看不懂很正常




读写锁


写成功才能读到






闭锁


Latch翻译:门闩(shaun)

juc lock的用法如下选中的蓝色代码

信号量

设置3个车位

值变成0后无法继续停车(请求阻塞)

可以利用信号量进行限流操作

使用tryAcquire 不会阻塞 会直接返回false,利用false可以返回一个页面给客户,让样客户可以看到当前爆满,请稍后重试这样的页面

error那里可以直接写当前流量过大,请稍后重试


相关推荐
沧海寄馀生3 分钟前
Apache Hadoop生态组件部署分享-Hue
大数据·hadoop·分布式·apache
qq_348231855 分钟前
完整的 Spring Boot + Redisson 分布式锁示例
spring boot·分布式·后端
m0_740043736 分钟前
SpringMVC/Spring Boot 控制器返回视图路径(相对 / 绝对路径)核心总结
java·spring boot·后端·spring
en-route10 分钟前
Kafka 参数配置与启动详解
分布式·kafka
0和1的舞者12 分钟前
《Spring Bean&DI 通关笔记:从定义到注入的全场景避坑指南》
java·开发语言·学习·spring·ioc·di·web
5008417 分钟前
鸿蒙 Flutter 分布式安全:软总线加密通信与设备互信认证
分布式·安全·flutter·华为·架构·wpf·开源鸿蒙
怪侠Kevin18 分钟前
Seata事务集成Kafka,实现事务一致性
分布式·kafka
量子信使18 分钟前
分布式经典密钥资源池与分布式量子密钥资源池的差异分析
分布式
我是小妖怪,潇洒又自在19 分钟前
springcloud alibaba(七)Gateway--服务网关
spring·spring cloud·gateway
夜空孤狼啸20 分钟前
npm、yarn、pnpm清理缓存
前端·缓存·npm