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

有哪些网站做外贸的网站如何快速收录

有哪些网站做外贸的,网站如何快速收录,施工企业管理,东方a 网站 域名之前的文章《分布式锁详解 - 分别利用Zookeeper和数据库实现分布式锁》,由于篇幅太长,又碰上加班时间不够充裕,所以没有把Redis的实现也顺带进去,特此做一些利用Redis实现分布式锁的分析。 PS:让我做选择的话&#xf…

之前的文章《分布式锁详解 - 分别利用Zookeeper和数据库实现分布式锁》,由于篇幅太长,又碰上加班时间不够充裕,所以没有把Redis的实现也顺带进去,特此做一些利用Redis实现分布式锁的分析。

PS:让我做选择的话,分布式锁的选择还是更愿意选择利用Zookeeper去实现的。
原因的话可以参考下面这张图:在这里插入图片描述

一、关于Redis分布式锁的基础知识

1、缓存有效期

redis中的数据,不一定都是持久化的;为存储元素设置生存时间,当元素过期时,会被自动删除。(主要是为了防止死锁,一般生存时间设定为业务操作时间的两倍基本就可以了)

2、SETNX命令

SETNX key value,将key的值设为value,当且仅当key不存在。若给定的key已经存在,则 SETNX 不做任何动作。SETNX是 【 SET if Not eXists 】的简写。(SETNX 命令就是用来保证设置失效时间和插入值是原子操作,如果不是原子执行就可能设置完key,在设置过期时间的时候系统挂机,就会导致死锁问题)

3、lua脚本

轻量小巧的脚本语言,用于支持redis操作序列的原子性。


PS:如果对Redis不是很熟悉的话,建议还是要去学习一下的,现在基本大部分的互联网公司都离不开Redis的掌握。此处顺便分享一个Redis的学习路线图给大家。
在这里插入图片描述

二、Redis实现分布式锁

还是和上一篇文章一样,Redis实现抽象锁AbstractLock,然后拓展其抽象方法。
AbstractLock.java

import java.util.concurrent.locks.Lock;/*** @author WangCw* @create 2019-04-22 19:52* @description**/
public abstract class AbstractLock implements Lock {public void getLock(){//尝试获取锁资源if(tryLock()){System.out.println("获取Lock锁的资源 #####");} else {//等待waitLock();//重新获取锁资源(等待后递归获取锁)getLock();}}//获取锁资源public abstract boolean tryLock();//等待public abstract void waitLock();//释放锁public abstract void unLock();}

1、项目引入Redis相关依赖信息:spring-data-redis(Spring整合Redis一些信息)和jedis(Redis客户端)。

2、Jedis连接池的配置:
在这里插入图片描述
3、实现:

class RedisLock extends AbstractLock{//随机值,保证每个线程随机值独立ThreadLocal<String>  local = new ThreadLocal<>();//获取锁的方法  ---> 插入一个元素,成功返回true,否则falsepublic  boolean tryLock(){//产生随机值String uuid = UUID.randomUUID.toString();local.set(uuid);//获取redis的原始链接Jedis jedis = (Jedis) factory.getConnection().getNativeConnection();//使用setNx命令请求写值,并设置失效时间String ret = jedis.set(KEY, uuid, "NX", "PX", 1000);//返回"OK"意味着加锁成功if("OK".equals(ret)){return true}return false; }// 等待获取锁的方法,一段缓存时间,防止系统频繁去获取锁public  void waitLock() throw Exception{Thread.sleep(3000);}//释放锁 --->  借助lua脚本删除加锁时添加的元素,保证操作原子性public  void unLock() throw Exception{//读取lua脚本String script = FileUtils.readFileByLines("C://unlock.lua");//获取redis的原始链接Jedis jedis = (Jedis) factory.getConnection().getNativeConnection();//通过jedis去执行Lua脚本jedis.eval(script, Array.asList(KEY), Arrays.asList(local.get()));}}

其中上面的lua脚本如下即可:

if redis.call("get", KEYS[1]) == ARGV[1] thenreturn redis.call("del", KEYS[1])
elsereturn 0
end

在这里插入图片描述

Redisson分布式锁

上面实现的Redis分布式存在一个大问题:假设设置失效时间10秒,如果由于某些原因导致10秒还没执行完任务,这时候锁自动失效,导致其他线程也会拿到分布式锁。面对这种情况,就需要通过一个守护线程,定时检测持有锁的线程是否还在正常做业务,如果是就给分布式锁的过期时间进行续命。实现起来相当复杂。这个时候,就可以借助Redisson

Redisson是一个在Redis的基础上实现的,基于Netty封装了一些利用了Redis特性的工具,让我们可以更高效、更简便的使用Redis。

业界大部分基于Redis的分布式锁都是由Redisson实现的,看看他的使用吧:

RLock lock = redisson.getLock("lock-xxxx");
try{加锁方式一:最常见的使用方法,默认30秒过期,watch dog(看门狗)每过10秒检测一次线程情况,进行续锁lock.lock();加锁方式二:支持过期解锁功能,10秒钟以后自动解锁, 无需调用`unlock()`方法手动解锁lock.lock(10, TimeUnit.SECONDS);加锁方式三:尝试加锁,最多等待3秒,上锁以后10秒自动解锁。boolean res = lock.tryLock(3, 10, TimeUnit.SECONDS);if(res){// 加锁成功,do your business}
finally {解锁方式:lock.unlock();
}

是不是非常简单,直接通过引入Redisson,获取到Rlock,剩下的操作就跟我们Java单机锁的使用方式基本相差无几了。

在这里插入图片描述

Redisson的两个特性:

1、加锁机制

  • 线程去获取锁,获取成功: 执行lua脚本,保存数据到redis数据库。
  • 线程去获取锁,获取失败: 一直通过while循环尝试获取锁,获取成功后,执行lua脚本,保存数据到redis数据库。

2、watch dog自动延期机制
当我们使用lock.lock();方法进行加锁时,默认锁的过期时间是30秒。Redisson会启动一个watch dog(看门狗)后台线程,以锁超时时间 / 3 = 30/3=10s作为周期(每过10秒检测一次),检测持有锁的线程是否还在执行业务,还在执行,就进行锁的续期。也就是说,如果一个拿到锁的线程一直没有完成业务逻辑,那么看门狗会帮助线程不断的延长锁超时时间,锁不会因为超时而被释放。默认情况下,看门狗的续期时间是30s,也可以通过修改Config.lockWatchdogTimeout来另行指定。

http://www.lbrq.cn/news/2352529.html

相关文章:

  • 自学网站推荐今日头条郑州头条新闻
  • 班级app网站建设在哪个网站可以免费做广告
  • 南京户外广告公司排行榜seo关键词排名软件
  • 建设银行怎么网站定制短信通知关键词推广优化app
  • wordpress 订餐模板seo网络推广
  • 网站搭建公司官网中国搜索引擎大全
  • 成都网站排名优化开发近一周热点新闻
  • 盗用别的公司网站模块找关键词的方法与技巧
  • 衡水市做网站百度账户
  • 定制网站建设网销怎么销售的
  • 培训网站建设机构衡阳网站优化公司
  • 携车网网站开发怎么样怎么自己创建网址
  • 企业网站本身应该就是企业( )的一部分百度快速排名优化技术
  • 网站如何做下一页西安百度网站快速排名
  • 楼盘建设信息网站百度爱采购优化软件
  • 做任务赚q红包的网站培训心得简短
  • 技术共享平台seo推广营销靠谱
  • 备案成功后怎么建设网站seo综合查询站长工具
  • 做网站应该用什么数据库百度热搜大数据
  • excel做网站链接娄底seo
  • 黄浦做网站seo优化是指
  • 公司官网网址陕西seo主管
  • 网站域名后缀网络推广公司口碑
  • 做公司网站需要制作内容营业推广是一种什么样的促销方式
  • 做网站 前途怎么建网址
  • 在人才网站做业务搜狗网站收录提交入口
  • 网站建设的一般流程是seo服务外包
  • 策划书中网站制作怎么写杭州小程序建设公司
  • 做旅游网站犯法吗技术培训
  • 万州区城乡建设委员会网站市场推广怎么做
  • AWS IAM 最佳安全实践通用指南
  • git起步
  • 开通保存图片权限
  • Java 避免空指针的方法及Optional最佳实践
  • Kubernetes 高级调度01
  • 破局与重构:文心大模型开源的产业变革密码