Java-Interview-Advanced/docs/distributed-system/redis-distribute-lock.md
2020-04-25 19:55:58 +08:00

37 lines
1.5 KiB
Markdown
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

面试突击第二季
![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
watchdogredisson框架后台执行一段逻辑每隔10s去检查一下这个锁是否还被当前客户端持有如果是的话重新刷新一下key的生存时间为30s
其他客户端尝试加锁这个时候发现“product_1_stock”这个key已经存在了里面显示被别的客户端加锁了此时他就会陷入一个无限循环阻塞住自己不能干任何事情必须在这里等待
第一个客户端加锁成功了此时有两种情况第一种情况这个客户端操作完毕之后主动释放锁第二种情况如果这个客户端宕机了那么这个客户端的redisson框架之前启动的后台watchdog线程就没了
此时最多30skey-value就消失了自动释放了宕机客户端之前持有的锁