分布式锁,进程锁,线程锁

分布式锁,进程锁,线程锁

概念

线程锁: 主要用来给方法和代码块来加锁,多个线程同时访问被加锁的方法或者代码块时,同一时间只有一个线程在执行,其他线程只能访问该对象中的非加锁代码块

进程锁: 为了控制操作系统中多个进程访问一个共享资源,可以使用本地系统的信号量控制

分布式锁: 当多个进程不在同一个系统中时,使用分布式锁控制多个进程对资源的访问

分布式锁的实现

分布式锁的实现总是要依赖第三方来存储锁的元数据信息。

  • 数据库乐观锁
  • 基于redis的分布式锁
  • 基于zookeeper的分布式锁

redis的jedis.set(String key, String value, String nxxx, String expx, int time)命令可以保证原子性。

缓解数据库压力

客户端很多线程都要修改某行数据时,没有拿到锁的线程都会在数据库端机器上不断轮询,增大数据库的压力。
我们可以使用分布式锁,将对数据库行锁的等待获取的轮询放到每一个客户端机器上去实现,避免数据库端线程不断轮询。

常用分布式锁

redis使用内存缓存,在能够进行水平扩容的同时还能提高负载,面对高并发分布式锁读取数据的读写请求能够高速响应,还有aof,rdb以及哨兵机制可以防止某台服务器宕机导致数据丢失的情况。
zookeeper使用分布式一致算法paxos实现,可以轻松面对高负载,一台服务器宕机完全不用担心数据问题,附带监听机制,某个线程释放锁后,其他程序可以及时得到通知来获取对分布式锁的控制权。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值