Loading

摘要: 在了解了加锁和锁重入之后,最需要了解的还是在分布式场景下或者多线程并发加锁是如何处理的? 阅读全文
posted @ 2021-07-22 20:13 程序员小航 阅读(222) 评论(0) 推荐(0) 编辑
摘要: 加锁逻辑已经介绍完毕,那当一个线程重复加锁是如何处理的呢? 阅读全文
posted @ 2021-07-21 16:06 程序员小航 阅读(285) 评论(4) 推荐(0) 编辑
摘要: 一般工作中常用的分布式锁,就是基于 Redis 和 ZooKeeper,前面已经介绍完了 Redisson 锁相关的源码,下面一起看看基于 ZooKeeper 的锁。也就是 Curator 这个框架。 阅读全文
posted @ 2021-07-16 10:19 程序员小航 阅读(493) 评论(0) 推荐(0) 编辑
摘要: Redisson 除了提供了分布式锁之外,还额外提供了同步组件,Semaphore 和 CountDownLatch。 阅读全文
posted @ 2021-07-15 15:04 程序员小航 阅读(448) 评论(0) 推荐(1) 编辑
摘要: RedLock 红锁,是分布式锁中必须要了解的一个概念。 所以本文会先介绍什么是 RedLock,当大家对 RedLock 有一个基本的了解。然后再看 Redisson 中是如何实现 RedLock 的。 阅读全文
posted @ 2021-07-12 18:42 程序员小航 阅读(1641) 评论(3) 推荐(4) 编辑
摘要: 前言 基于 Redis 的 Redisson 分布式联锁 RedissonMultiLock 对象可以将多个 RLock 对象关联为一个联锁,每个 RLock 对象实例可以来自于不同的 Redisson 实例。 当然,这是官网的介绍,具体是什么?一起看看联锁 MultiLock 使用以及源码吧! M 阅读全文
posted @ 2021-07-10 10:02 程序员小航 阅读(409) 评论(0) 推荐(0) 编辑
摘要: 前言 看门狗机制是在 RedissonBaseLock#scheduleExpirationRenewal 方法中,这块公平锁和非公平锁并无区别。 前文已经了解到,公平锁加锁失败之后,会将当前放到等待队列中,通过 Java 代码中的循环不断尝试获得锁。 锁释放 主动释放 源码:RedissonFai 阅读全文
posted @ 2021-07-09 10:01 程序员小航 阅读(182) 评论(0) 推荐(0) 编辑
摘要: 前言 在上一篇文章中已经分析过公平锁的加锁源码,并得出结论: Redis Hash 数据结构:存放当前锁,Redis Key 就是锁,Hash 的 field 是加锁线程,Hash 的 value 是 重入次数; Redis List 数据结构:充当线程等待队列,新的等待线程会使用 rpush 命令 阅读全文
posted @ 2021-07-08 10:02 程序员小航 阅读(414) 评论(0) 推荐(0) 编辑
摘要: 前言 默认的加锁逻辑是非公平的。 在加锁失败时,线程会进入 while 循环,一直尝试获得锁,这时候是多线程进行竞争。就是说谁抢到就是谁的。 Redisson 提供了 公平锁 机制,使用方式如下: RLock fairLock = redisson.getFairLock("anyLock"); / 阅读全文
posted @ 2021-07-07 08:12 程序员小航 阅读(361) 评论(0) 推荐(0) 编辑
摘要: 前言 前面已经了解到了,可重入锁加锁,看门狗以及锁的互斥阻塞。 当锁加锁成功之后,锁是如何释放的? 主动释放 源码入口:RedissonLock#unlock 在解锁时会获取当前线程的id。 一路往里跟,直接来到 RedissonLock#unlockInnerAsync: 分析一下 lua 脚本的 阅读全文
posted @ 2021-07-05 11:07 程序员小航 阅读(196) 评论(0) 推荐(0) 编辑
摘要: 看过可重入锁的 Lua 脚本,已经可以知道当锁存在时,是会加锁失败的。 下面看一下,加锁失败之后是如何处理的呢? 阅读全文
posted @ 2021-07-05 08:09 程序员小航 阅读(114) 评论(0) 推荐(0) 编辑
摘要: 说起 Redisson,比较耳熟能详的就是这个看门狗(Watchdog)机制。 本文就一起看看加锁成功之后的看门狗(Watchdog)是如何实现的? 阅读全文
posted @ 2021-07-03 16:24 程序员小航 阅读(1066) 评论(0) 推荐(1) 编辑
摘要: 使用分布式服务,那一定绕不开分布式服务中数据并发更新问题! 单系统很容易想到 Java 的各种锁,像 synchronize、ReentrantLock 等等等,那分布式系统如何处理? 阅读全文
posted @ 2021-07-02 08:23 程序员小航 阅读(511) 评论(0) 推荐(0) 编辑
摘要: 相信小伙伴一定用过 @Transaction 注解,那 @Transaction 背后的秘密又知道多少呢? Spring 是如何开启事务的?又是如何进行提交事务和关闭事务的呢? 阅读全文
posted @ 2021-06-25 10:43 程序员小航 阅读(890) 评论(5) 推荐(1) 编辑
摘要: 写什么接口文档,快来看看这个 IDEA 插件,一键生成 Markdown 文档,直接上传 YApi! 阅读全文
posted @ 2021-06-17 16:15 程序员小航 阅读(437) 评论(0) 推荐(0) 编辑
摘要: 三篇文章分别通过实际操作,介绍了主键、非主键唯一索引、普通索引、普通字段四个方面介绍了加锁的范围。 阅读全文
posted @ 2021-06-08 10:38 程序员小航 阅读(630) 评论(0) 推荐(0) 编辑
摘要: 实操验证 MySQL 普通索引和无索引加锁的范围 阅读全文
posted @ 2021-06-06 11:51 程序员小航 阅读(1287) 评论(0) 推荐(0) 编辑
摘要: 实操验证 MySQL 的 next-key 的 bug 在非主键唯一索引上还是存在的! 阅读全文
posted @ 2021-06-06 11:50 程序员小航 阅读(290) 评论(0) 推荐(0) 编辑
摘要: 实操验证MySQL 主键索引加锁的时候锁范围是什么? 阅读全文
posted @ 2021-06-06 11:48 程序员小航 阅读(1355) 评论(0) 推荐(1) 编辑
摘要: 作为开发,在本机捣鼓一下 Docker 还是很有必要的,本篇文章介绍如何使用 Docker 安装 MySQL,并在终端(iTerm2)使用命令连接 MySQL。 阅读全文
posted @ 2021-06-06 11:47 程序员小航 阅读(756) 评论(0) 推荐(0) 编辑