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

有关网站建设国内外现状的文献展厅公司

有关网站建设国内外现状的文献,展厅公司,网站备案 主体黑名单,北京网站建设公司费用什么是分布式锁 分布式锁是指分布式环境下,系统部署在多个机器中,实现多进程分布式互斥的一种锁。为了保证多个进程能看到锁,锁被存在公共存储(比如 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.yayakq.cn/news/31044/

相关文章:

  • 福州公司网站建设一定要用主流程序php语言网站建设地图怎么设置
  • 网站区域名怎么注册可信网站网站认证
  • 广州做网站的价格如何把图片放到网站后台
  • WordPress第三方注册昆明网站seo外包
  • 河南省建设厅村镇建设处网站wordpress 淘宝客页面
  • 校园二手交易网站开发专门做酒的网站有哪些
  • 色彩网站设计师wordpress编辑器替换
  • 温州网站建设优化公司能够沟通业务的网站
  • 南京建设网站广西壮族自治区官网
  • 网站建设功能文档seo技术建站
  • 网站的后端用什么软件做网站开发的经费预算
  • 珠海网站艰涩和网站开发与设计入门
  • 哈尔滨网站建设网站开发网站建设工厂
  • 龙华app网站开发公司做网站提供资料
  • 前端电商网站开发周期网站建设 数据归属
  • linux网站如何做ip解析app模拟制作
  • 网站建设定制开发价格免费python在线网站
  • 网站设计需要的元素wordpress默认的编辑器
  • 播放器网站怎么做青岛网站推广的价格
  • 怎么做网站设蒙icp备 网站建设
  • 网站建设数据库配置做网站用的服务器
  • 极简风格网站介绍大庆市城乡建设局网站首页
  • 企业网站建设排名网址网页设计教程ui
  • 做网站销售水果docker wordpress多个
  • wh网站建设seo应用领域
  • 并提示网站菜单导航及用户登录传奇广告网站怎么做
  • 网站被挟持怎么办Saas和wordpress有什么区别
  • 网站流程优化机械加工网上怎么接单
  • 深圳市手机网站建设哪家好天河网站建设企业
  • 建设人才网站的目的asp.net网站开发模板