#青训营笔记创作活动#
2月14日 打卡day11
今天学习了分布式锁。

线程锁:主要用来给方法、代码块加锁。当某个方法或代码使用锁,在同一时刻仅有一个线程执行该方法或该代码段。线程锁只在同一JVM中有效果,因为线程锁的实现在根本上是依靠线程之间共享内存实现的,比如synchronized是共享对象头,显示锁Lock是共享某个变量(state)。
进程锁:为了控制同一操作系统中多个进程访问某个共享资源,因为进程具有独立性,各个进程无法访问其他进程的资源,因此无法通过synchronized等线程锁实现进程锁。
分布式锁:当多个进程不在同一个系统中(比如分布式系统中控制共享资源访问),用分布式锁控制多个进程对资源的访问。
基于数据库实现分布式锁基于数据库表(锁表,很少使用)
乐观锁(基于版本号)
悲观锁(基于排它锁)
基于 redis 实现分布式锁: 单个Redis实例:setnx(key,当前时间+过期时间) + Lua
Redis集群模式:Redlock
基于 zookeeper实现分布式锁临时有序节点来实现的分布式锁,Curator
基于 Consul
展开
评论