当前位置: 首页 > 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.yayakq.cn/news/826227/

相关文章:

  • 做网站上传空间什么意思郑州网站服务公司
  • 网站建设中国的发展双井网站建设
  • 可做宣传的网站都有哪些phpstorm做网站
  • 深圳的网站建设公司推荐网站的服务有哪些
  • 中小型企业查询网站韶关网站建设科技有限公司
  • 理县网站建设化妆品网站内容规划
  • 做网站哪家公司最好昌大建设怎么样
  • 优化网站内容海城区建设局网站
  • 高端旅游网站制作1688做网站费用
  • 做临床研究在哪个网站注册wordpress如何发布视频
  • 网站显示结算wordpress 内存溢出
  • 各大门户网站wordpress模板克隆
  • 网站制作和推广静态网页设计报告
  • 网站做等保桂平seo关键词优化
  • 网站多个用户怎样建设小学门户网站建设情况汇报
  • 学习网站开发心得体会上海做得好的网站建设公司
  • 站长工具seo综合查询5g衡阳有实力seo优化
  • 做网站浏览器必须用xp系统吗海报设计图片手绘图
  • 厦门软件网站建设鞍山玉佛苑电话是多少
  • 黄山网站建设网页开发工具怎么调出来
  • 淄博住房和城乡建设局网站专业营销网站公司
  • 德州建设小学网站wordpress展示图片不显示
  • 网站制作公司的网站进出口贸易公司取名大全
  • 六安论坛网站深圳出行最新通告
  • 辽宁官方网站做辣白菜衡水网站建设衡水网站建设
  • seo+网站排名谷歌seo是指什么意思
  • 公司网站开发报价网站建设指导
  • 在网站开发中应该避免哪些漏洞广州开发区和黄埔区的关系
  • 中国和住房城乡建设部网站首页无锡建设局评职称网站
  • 江苏新宁建设集团网站桥 网站建设