当前位置: 首页 > news >正文

广东省住房和城乡建设委员会官方网站百度优化师

广东省住房和城乡建设委员会官方网站,百度优化师,网站seo的主要优化内容,深圳市工程建设交易服务中心网站什么是分布式锁 分布式锁是指分布式环境下,系统部署在多个机器中,实现多进程分布式互斥的一种锁。为了保证多个进程能看到锁,锁被存在公共存储(比如 Redis、Memcache、数据库等三方存储中),以实现多个进程并…

什么是分布式锁

分布式锁是指分布式环境下,系统部署在多个机器中,实现多进程分布式互斥的一种锁。为了保证多个进程能看到锁,锁被存在公共存储(比如 Redis、Memcache、数据库等三方存储中),以实现多个进程并发访问同一个临界资源,同一时刻只有一个进程可访问共享资源,确保数据的一致性。

在单机时代,虽然不存在分布式锁,但也会面临资源互斥的情况,只不过在单机的情况下,如果有多个线程要同时访问某个共享资源的时候,我们可以采用线程间加锁的机制,即当某个线程获取到这个资源后,就需要对这个资源进行加锁,当使用完资源之后,再解锁,其它线程就可以接着使用了。例如,在JAVA中,甚至专门提供了一些处理锁机制的一些API(synchronize/Lock等)。

但是到了分布式系统的时代,这种线程之间的锁机制,就没作用了,系统可能会有多份并且部署在不同的机器上,这些资源已经不是在线程之间共享了,而是属于进程之间共享的资源。因此,为了解决这个问题,「分布式锁」就强势登场了。

分布式锁是控制分布式系统之间同步访问共享资源的一种方式。在分布式系统中,常常需要协调他们的动作。如果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源,那么访问这些资源的时候,往往需要互斥来防止彼此干扰来保证一致性,在这种情况下,便需要使用到分布式锁。

在分布式系统中,常常需要协调他们的动作。如果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源,那么访问这些资源的时候,往往需要互斥来防止彼此干扰来保证一致性,这个时候,便需要使用到分布式锁。

1. 分布式锁要求

  • 排他性:在同一时间只会有一个客户端能获取到锁,其它客户端无法同时获取
  • 避免死锁:这把锁在一段有限的时间之后,一定会被释放(正常释放或异常释放)
  • 高可用:获取或释放锁的机制必须高可用且性能佳

2. 分布式锁实现

目前相对主流的有三种,从实现的复杂度上来看,从上往下难度依次增加:数据库(MySQL),Redis,ZooKeeper

Redisson

Redisson开源框架是一个Redis的分布式锁的现成实现方案,是Redis的 java 实现的客户端。通过 Netty 支持非阻塞 I/O。

Redisson实现了分布式锁的自动续期机制、锁的互斥自等待机制、锁的可重入加锁与释放锁的机制。

1.依赖坐标

<dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-boot-starter</artifactId>
</dependency>

2.代码示例

public String testOneLock() {
// 1.获取锁,只要锁的名字一样,获取到的锁就是同一把锁。
RLock lock = redisson.getLock("onelock");
System.out.println("-----获得锁lock对象:"+lock);
// 2.加锁
lock.lock();
try {System.out.println("加锁成功,执行逻辑代码。线程 ID:" + Thread.currentThread().getId());//while (true){Thread.sleep(10000);System.out.println("逻辑代码执行完成!。。。");//}
} catch (Exception e) {e.printStackTrace();
} finally {// 3.解锁lock.unlock();System.out.println("Finally处,释放锁成功。线程 ID:" + Thread.currentThread().getId());
}
return "onelock锁测试完成。";
}
public FlyingFlowerV1Vo insert(FlyingFlowerReq flyingFlowerReq, String userId) throws Exception {//对进来的用户加锁RLock userLock = redissonClient.getLock(RedissonKey.USER_ID + userId);try{//尝试加锁, 最多等待1秒, 1000秒后自动解锁if (userLock.tryLock(1, 1000, TimeUnit.MILLISECONDS)) {//业务逻辑的代码,通常在插入修改的操作方法上进行加锁}catch (Exception e){//提示System.out.println("接令频繁"+ userId);throw new ResultInfo(ResultUtils.error("接令频繁,请稍后再试"));}finally {//解锁if (userLock.isHeldByCurrentThread()) {userLock.unlock();}}return null;
}
http://www.dt0577.cn/news/47933.html

相关文章:

  • 自己开发一个手机网站公司的seo是什么意思
  • 如何诊断网站seo免费建站网站一站式
  • 平度好的建设网站搜索引擎优化百度
  • 博物馆门户网站建设优势网络营销专业培训学校
  • php做网站常见实例seo引擎优化工具
  • wordpress日本主机长尾词排名优化软件
  • 2018年主流网站开发语言关键词查询工具哪个好
  • 建设网站运营收入湖南平台网站建设制作
  • 网站开发维护求职信最常用的网页制作软件
  • 杭州网站建设页面免费推广网站大全
  • 站长工具大全google下载手机版
  • 怎么选择模板建站服务百度指数爬虫
  • 258做网站怎么样营销策划公司名称
  • 家具网站开发环境与工具网络软文范例
  • 外贸网站建设推广公司前景如何周口网络推广公司
  • 网站链接网址怎么做如何搭建公司网站
  • 郑州交友网站开发公司常见的网络营销平台有哪些
  • 网站建设定制开发价格seo网络排名优化技巧
  • 网站制作收费广东seo排名
  • 专做零食的网站网络营销有哪些推广平台
  • 企业年金个人查询太原网站快速排名优化
  • 中国小康建设官方网站教育培训机构平台
  • 最优秀的佛山网站建设今日国际新闻最新消息
  • 网站开发人员的行业分析网店代运营诈骗
  • 做视频网站弹窗网站优化排名推广
  • 佛山多语网站制作郑州网站建设制作公司
  • 网站从哪里找的河南企业站seo
  • 辽宁省营商环境建设监督局网站如何做好宣传推广
  • python做网站 教育如何利用seo赚钱
  • 东台网站制作公司百度第三季度财报2022