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

拼团网站开发关键词挖掘长尾词

拼团网站开发,关键词挖掘长尾词,网站建设几个税点,站酷网电脑版一、分布式锁-redission功能介绍 基于setnx实现的分布式锁存在下面的问题: 重入问题:重入问题是指 获得锁的线程可以再次进入到相同的锁的代码块中,可重入锁的意义在于防止死锁,比如HashTable这样的代码中,他的方法都…

一、分布式锁-redission功能介绍

基于setnx实现的分布式锁存在下面的问题:

重入问题:重入问题是指 获得锁的线程可以再次进入到相同的锁的代码块中,可重入锁的意义在于防止死锁,比如HashTable这样的代码中,他的方法都是使用synchronized修饰的,假如他在一个方法内,调用另一个方法,那么此时如果是不可重入的,不就死锁了吗?所以可重入锁他的主要意义是防止死锁,我们的synchronized和Lock锁都是可重入的。

不可重试:是指目前的分布式只能尝试一次,我们认为合理的情况是:当线程在获得锁失败后,他应该能再次尝试获得锁。

超时释放:我们在加锁时增加了过期时间,这样的我们可以防止死锁,但是如果卡顿的时间超长,虽然我们采用了lua表达式防止删锁的时候,误删别人的锁,但是毕竟没有锁住,有安全隐患

主从一致性: 如果Redis提供了主从集群,当我们向集群写数据时,主机需要异步的将数据同步给从机,而万一在同步过去之前,主机宕机了,就会出现死锁问题。

那么什么是Redission呢

Redisson是一个在Redis的基础上实现的Java驻内存数据网格(In-Memory Data Grid)。它不仅提供了一系列的分布式的Java常用对象,还提供了许多分布式服务,其中就包含了各种分布式锁的实现。

Redission提供了分布式锁的多种多样的功能

官网地址:Redisson: Easy Redis Java client with features of In-Memory Data Grid

GitHub地址: https://github.com/redisson/redisson

二、分布式锁-Redission快速入门

引入依赖:

<dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>3.13.6</version>
</dependency>

配置Redisson客户端:

@Configuration
public class RedissonConfig {@Beanpublic RedissonClient redissonClient(){// 配置Config config = new Config();config.useSingleServer().setAddress("redis://192.168.150.101:6379").setPassword("123321");// 创建RedissonClient对象return Redisson.create(config);}
}

如何使用Redission的分布式锁

@Resource
private RedissionClient redissonClient;@Test
void testRedisson() throws Exception{//获取锁(可重入),指定锁的名称RLock lock = redissonClient.getLock("anyLock");//尝试获取锁,参数分别是:获取锁的最大等待时间(期间会重试),锁自动释放时间,时间单位boolean isLock = lock.tryLock(1,10,TimeUnit.SECONDS);//判断获取锁成功if(isLock){try{System.out.println("执行业务");          }finally{//释放锁lock.unlock();}}}

在 VoucherOrderServiceImpl

注入RedissonClient

@Resource
private RedissonClient redissonClient;@Override
public Result seckillVoucher(Long voucherId) {// 1.查询优惠券SeckillVoucher voucher = seckillVoucherService.getById(voucherId);// 2.判断秒杀是否开始if (voucher.getBeginTime().isAfter(LocalDateTime.now())) {// 尚未开始return Result.fail("秒杀尚未开始!");}// 3.判断秒杀是否已经结束if (voucher.getEndTime().isBefore(LocalDateTime.now())) {// 尚未开始return Result.fail("秒杀已经结束!");}// 4.判断库存是否充足if (voucher.getStock() < 1) {// 库存不足return Result.fail("库存不足!");}Long userId = UserHolder.getUser().getId();//创建锁对象 这个代码不用了,因为我们现在要使用分布式锁//SimpleRedisLock lock = new SimpleRedisLock("order:" + userId, stringRedisTemplate);RLock lock = redissonClient.getLock("lock:order:" + userId);//获取锁对象boolean isLock = lock.tryLock();//加锁失败if (!isLock) {return Result.fail("不允许重复下单");}try {//获取代理对象(事务)IVoucherOrderService proxy = (IVoucherOrderService) AopContext.currentProxy();return proxy.createVoucherOrder(voucherId);} finally {//释放锁lock.unlock();}}

三、总结

Redisson分布式锁快速入门步骤1:

  1. 引入依赖:在pom.xml中添加Redisson的依赖。
  2. 添加配置:创建一个Config对象,并调用其各种方法来配置Redisson。
  3. 获取Redisson对象:使用Redisson的create方法来获取Redisson对象。
  4. 创建分布式锁:使用Redisson对象调用其lock方法来创建分布式锁。
  5. 解锁:使用Redisson对象调用其unlock方法来解锁。

http://www.dinnco.com/news/65896.html

相关文章:

  • 做网站用php360seo关键词优化
  • 找网站建设市场营销专业就业方向
  • 网站怎么做吸引人软文营销范文
  • wordpress 微语插件网站优化seo教程
  • 网站做ssl证书有风险巨量引擎app
  • 旅游网站开发研究现状怎么用网络推广业务
  • 湖州网站建设湖州网站建设seo研究中心
  • 门户网站做等保需要备案哪些竞价推广和seo的区别
  • 做百度手机网站点击软正规的代运营公司
  • 网站建设公司销售经理职责只需要手机号的广告
  • 免费建设网站c3sales四川seo推广
  • seo计费怎么刷关键词的如何做seo
  • 公司网站开发费用如何做账世界500强企业名单
  • 如何做推广麦当劳的网站如何制作一个网址
  • 运营电商西安百度seo推广
  • 织梦如何做网站地图如何自己弄个免费网站
  • 电影网站怎么做laravel宁波免费seo在线优化
  • 黄陂区建设招标网站镇江seo快速排名
  • 做新媒体国外网站网站建设的意义和目的
  • 个人网站有备案吗能去百度上班意味着什么
  • 智能网站建设宁德市属于哪个省份
  • 巴中做网站 微信开发西安建站推广
  • 怎么自己设置网站模板整合营销策略
  • 大连做网站公司排行榜网站服务器ip地址查询
  • 怎么请人做网站2023年第三波新冠9月
  • 网站选项卡如何做自适应网络营销的四个策略
  • 如何做网站的关键词排名下载优化大师并安装
  • 沈阳百度seo代理seo经验是什么
  • 课题组网站建设什么是seo优化?
  • 网站网络营销外包广州seo网站营销