mirror of
https://gitee.com/shishan100/Java-Interview-Advanced
synced 2024-12-01 02:28:54 +00:00
37 lines
1.5 KiB
Markdown
Executable File
37 lines
1.5 KiB
Markdown
Executable File
|
||
面试突击第二季
|
||
![distributed-lock](/docs/distributed-system/images/redis-distribute-lock.png)
|
||
Redis分布式锁,很少自己撸,Redisson框架,他基于Redis实现了一系列的开箱即用的高级功能,比如说分布式锁
|
||
|
||
引入maven依赖,他示例代码就几行
|
||
|
||
比如说,苹果这个商品的id是1
|
||
|
||
redisson.lock(“product_1_stock”)
|
||
|
||
key的业务语义,就是针对product_id = 1的商品的库存,也就就是苹果的库存,进行加锁
|
||
|
||
如果要学习redis技术的,跟我之前录制的《亿级流量商品详情页系统》去学习,在训练营的课程目录里有一个文档,有我之前的课程的地址
|
||
|
||
|
||
product_1_stock: {
|
||
“xxxx”: 1
|
||
}
|
||
|
||
生存时间:30s
|
||
|
||
watchdog,redisson框架后台执行一段逻辑,每隔10s去检查一下这个锁是否还被当前客户端持有,如果是的话,重新刷新一下key的生存时间为30s
|
||
|
||
其他客户端尝试加锁,这个时候发现“product_1_stock”这个key已经存在了,里面显示被别的客户端加锁了,此时他就会陷入一个无限循环,阻塞住自己,不能干任何事情,必须在这里等待
|
||
|
||
|
||
第一个客户端加锁成功了,此时有两种情况,第一种情况,这个客户端操作完毕之后,主动释放锁;第二种情况,如果这个客户端宕机了,那么这个客户端的redisson框架之前启动的后台watchdog线程,就没了
|
||
|
||
此时最多30s,key-value就消失了,自动释放了宕机客户端之前持有的锁
|
||
|
||
|
||
|
||
|
||
|
||
|