分布式
2023-12-04 17:54:40 2 举报
AI智能生成
java
作者其他创作
大纲/内容
分布式锁
要求
排他性
保证分布式部署、服务集群部署的环境下,被共享的资源如数据或者代码块在同一时间内只能被一台机器上的一个线程执行。
避免死锁
指的是当前线程获取到锁之后,经过一段有限的时间(该时间一般用于执行实际的业务逻辑),一定要被释放(正常或者异常情况)
高可用
指的是获取或释放锁的机制必须高可用而且性能极佳。
可重入
指的是该分布式锁最好是一把可重入锁,即当前机器的当前线程在彼时如果没有获取到锁,那么在等待一定的时间后一定要保证可以再被获取到。
公平锁(可选)
应当保证来自不同机器的并发线程可以公平获取到锁。
实现
基于数据库级别
乐观锁
主要是通过在查询、操作共享数据记录时带上一个标识字段version,通过version来控制每次对数据记录执行的更新操作
悲观锁
基于Redis的原子操作
通过Redis提供的原子操作SETNX与EXPIRE来实现。SETNX表示只有当Key在Redis不存在时才能设置成功,通常这个Key需要设计为与共享的资源有联系,用于间接地当作“锁”,并采用EXPIRE操作释放获取的锁。
基于ZooKeeper的互斥排它锁
这种机制主要是通过ZooKeeper在指定的标识字符串下维护一个临时有序的节点列表Node List,并保证同一时刻并发线程访问共享资源时只能有一个最小序号的节点(即代表获取到锁的线程),该节点对应的线程即可执行访问共享资源的操作
基于开源框架Redisson
场景
重复提交
商城高并发抢单
分布式锁进行高并发优化?
0 条评论
下一页