设为首页 加入收藏

TOP

Redis实现分布式锁的正确方法
2023-07-26 08:17:56 】 浏览:233
Tags:Redis 方法

我的业务场景是这样的,我们服务有库存模块,而我的服务又是多节点部署,要高峰期会存在库存差异,后面分析问题之后,打算采用redis实现分布式锁(主要的原因是服务已经集成了redis,不需要做额外的配置)


不要感觉奇怪,分布式锁怎么会导致数据库事务超时呢?
我的代码大概是这样的:


当你的key长时间获取不到锁,并且数据库事务都有超时时间的限制,那么就会出现数据库事务超时问题;
解决方案


我的key的过期时间设置的是30s,如果30秒业务还没有执行完毕,锁就会自动释放,锁释放之后,其它线程又会去占用锁,同样会导致问题的发生;
解决方案


分布式锁刚加上之后,生产出现一个问题,就是:redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool
解决办法
开始查代码,发现是开发人员没有对连接进行释放;


修复bug之后,又在线上跑了一段时间,又出现了redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool
解决办法


1.当前请求获取锁,如果获取不到,则释放当前连接,并休眠一会;
2.合理配置redis连接池大小,主要参考具体业务场景的并发量来设置;


回顾一下加锁的参数:


其中:value,我使用它来表示加锁人,必须是一个唯一的标识


先说一下这种问题产生的原因:
如果master节点由于某原因发生了主从切换,那么就会出现锁丢失的情况;


解决办法



】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇深入理解MySQL触发器 下一篇Redis的数据持久化

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目