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

做简历网站 39网站怎么建设原始站点

做简历网站 39,网站怎么建设原始站点,wordpress搬家dz论坛,百度top风云榜目录 1. 如何实现分布式锁 2. Redis 分布式锁存在什么问题 2.1 解决死锁问题 2.2 解决锁误删问题 1. 如何实现分布式锁 Redis 天生就可以作为一个分布式系统来使用,所以它实现的锁都是分布式锁。 Redis 可以通过 setnx(set if not exists&#xff09…

目录

1. 如何实现分布式锁

2. Redis 分布式锁存在什么问题

2.1 解决死锁问题

2.2 解决锁误删问题


1. 如何实现分布式锁

Redis 天生就可以作为一个分布式系统来使用,所以它实现的锁都是分布式锁。

Redis 可以通过 setnx(set if not exists)命令实现分布式锁~

  • setnx mylock true  -  加锁
  • del mylock  -  释放锁

通过执行结果是否为 1 可以判断是否成功获取到锁~

2. Redis 分布式锁存在什么问题

Redis 分布式锁存在两个问题:

1.死锁问题:未设置过期时间锁忘记释放加锁后还没来的及释放锁就宕机了都会导致死锁问题.

2. 锁误删问题:设置了超时时间,但是线程执行超过超时时间后锁误删问题.

2.1 解决死锁问题

        MySQL 中解决死锁问题是通过设置超时时间,Redis 也是如此,但是问题来了,第一步先加锁,然后再设置超时时间,那么就不满足原子性了,那么怎么办 ?

        官方在 Redis 2.6.12 版本之后,新增了一个功能,我们可以使用一条命令既执行加锁操作,又设置超时时间:setnx expire

  • 第一条命令成功加锁,并设置 30 s 过期时间
  • 第二条命令跟在第一条命令后,还没有超过 30s,所以获取失败

2.2 解决锁误删问题

锁误删问题是解决死锁问题带来的问题,如何理解 ?

既然知道了什么是锁误删问题,那么如何解决 ?

答:可以通过添加锁标识来解决.

        前面我们使用 set 命令的时候,只使用到了 key,那么可以给 value 设置一个标识,表示当前锁归属于那个线程,例如 value=thread1,value=thread2.....

但是这样解决依然存在问题,因为新增锁标识之后,线程在释放锁的时候,需要执行两步操作了:

  1. 判断锁是否属于自己
  2. 如果是,就删除锁

这样就不能保证原子性了,那该怎么办?

【解决方案】

  1. 使用 lua 脚本来解决 (Redis 本身就能保证 lua 脚本里面所有命令都是原子性操作)
  2. 使用 Redisson 框架来解决(主流)

那么 Redisson 如何实现分布式锁呢 ?

【代码示例】

1.引入 Redisson 依赖

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

2.创建 RedissonClient 对象

@Configuration
public class RedissonConfig {@Beanpublic RedissonClient redissonClient() {Config config = new Config();config.useSingleServer().setAddress("redis://127.0.0.1:6379");// 如果有密码需要设置密码return Redisson.create(config);}
}

3.调用分布式锁

@RestController
public class LockController {@Resourceprivate RedissonClient redissonClient;@RequestMapping("/lock")public String lockResource() throws InterruptedException {String lockKey = "myLock";// 获取锁RLock lock = redissonClient.getLock(lockKey);try {// 超时时间 10s, [tryLock 获取成功才需要释放锁,获取失败不需要释放锁]boolean isLocked = lock.tryLock(20, TimeUnit.SECONDS);if(isLocked) {// 成功获取到锁try {TimeUnit.SECONDS.sleep(5);return "成功获取到锁,并执行业务代码";} catch (InterruptedException e) {e.printStackTrace();} finally {// 释放锁lock.unlock();}} else {// 获取锁失败return "获取锁失败";}} catch (InterruptedException e) {e.printStackTrace();}return "获取锁成功";}
}

启动项目,使用 8080 端口访问接口:

 


http://www.yayakq.cn/news/734793/

相关文章:

  • 湛江网站建设模板在网站上做漂浮
  • 七里港网站建设宁波网易企业邮箱
  • 网站开发公司招聘计算机前端培训多少钱
  • 做网站较好的框架wordpress搬家简书
  • 绵阳网站搜索排名wordpress也没修改
  • 太原网站的公司民治营销型网站制作
  • 南网站建设网络营销方案步骤
  • 做ppt音乐模板下载网站链接提取视频的网站
  • 做网站的框架常州哪家公司做网站
  • 柯桥网站建设免费自媒体网站
  • 儋州网站建设网页编辑可视化软件
  • 厦门网站建设团队定制网站开发设计
  • 做3d模型的叫什么牛的网站wordpress汉化教程视频
  • 网站注册页面代码wordpress 服务器错误
  • 外贸网站推广平台ppt模板的种类
  • 网站验证码 出不来线上引流的八种推广方式
  • 网站导航图标wordpress 特色缩略图
  • 网站关键词更新简易网页模板
  • 德阳建设银行招聘网站wordpress 文件不刷新
  • 去掉博客网站链接后面的wordpress潍坊 网站建设
  • 洛阳霞光网络建站公司wordpress加密修改密码
  • 做网站需要购买地域名吗无极电影网评
  • 东莞网站建设市场分析长兴企业网站开发
  • 做国外零售做什么网站qq刷赞网站如何做分站
  • 视频网站开发周期vps搭建wordpress
  • 福州高端网站建设公司开电商网站需要多少钱
  • 网站建设开发的流程成都十大营销策划公司
  • 霸州建网站企业网站建设报价明细表
  • 什么样 个人网站 备案建设工程项目管理网站
  • 网站建设数据库模板单页展示网站