如何做企业招聘网站,广告设计专业专科学校有哪些,网站建设 数据库连接,一个服务器下怎么做两个网站吗推荐链接#xff1a; 总结——》【Java】 总结——》【Mysql】 总结——》【Redis】 总结——》【Kafka】 总结——》【Spring】 总结——》【SpringBoot】 总结——》【MyBatis、MyBatis-Plus】 总结——》【Linux】 总结——》【MongoD… 推荐链接 总结——》【Java】 总结——》【Mysql】 总结——》【Redis】 总结——》【Kafka】 总结——》【Spring】 总结——》【SpringBoot】 总结——》【MyBatis、MyBatis-Plus】 总结——》【Linux】 总结——》【MongoDB】 总结——》【Elasticsearch】 Redis——》实现分布式锁 一、最简单的实现1、实现SETNX加锁DEL释放锁2、优点3、缺点 二、最严谨的实现1、实现SET加锁 唯一标识 过期时间 Lua脚本释放锁1加锁 唯一标识 过期时间2操作共享资源3Lua脚本释放锁 2、优点 三、Java实现分布式锁四、分布式锁可能遇到的问题 一、最简单的实现
1、实现SETNX加锁DEL释放锁
// 加锁如果 key 不存在才会设置它的值否则什么也不做
SETNX lock_key 1// 业务逻辑
DO THINGS// 释放锁删除key
DEL lock_key2、优点
实现了加锁和释放锁
3、缺点 参考链接 Redis——》死锁 Redis——》锁被别人释放 容易造成死锁
二、最严谨的实现
1、实现SET加锁 唯一标识 过期时间 Lua脚本释放锁
1加锁 唯一标识 过期时间
SET lock_key unique_value EX expire_time NX2操作共享资源
3Lua脚本释放锁
GET判断锁是否归属自己再DEL释放锁
//Lua脚本语言
//释放锁先判断这把锁是否归自己持有比较unique_value是否相等避免误释放
if redis.call(get,KEYS[1]) ARGV[1] thenreturn redis.call(del,KEYS[1])
elsereturn 0
end2、优点
实现了加锁和释放锁不会出现死锁和释放别人的锁。
三、Java实现分布式锁 参考链接 Java——》实现分布式锁 Java——》使用Redisson实现分布式锁 四、分布式锁可能遇到的问题 参考链接 Redis——》死锁 Redis——》如何评估锁过期时间 Redis——》锁被别人释放 可能遇到的问题解决方案死锁设置过期时间过期时间评估不好锁提前过期守护线程自动续期锁被别人释放锁写入唯一标识释放锁时先检查标识再释放