首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

redis实现分布锁的小方法(二)

现在很多码农都有接触到Redis,接下来就跟大家介绍一下redis实现分布锁的小方法。

使用 set 命令设置锁标记,必须有超时时间,以便客户端崩溃,也可以释放锁;对于不需要超时时间的,需要自己实现一个能不断刷新锁超时时间的线程。如果占用setnx的线程异常一直不释放锁,导致后续用户无法执行逻辑,setnx命令超时时间,并且在finally中释放setnx锁。

Redis,它里面提供了SETNX命令可以实现锁的排他性,当key不存在就返回1,存在就返回0。然后还可以用expire命令设置锁的失效时间,从而避免死锁问题。

当然有可能存在锁过期了,但是业务逻辑还没执行完的情况。Redisson这个开源组件,就提供了分布式锁的封装实现,并且也内置了一个Watch Dog机制来对key做续期。

如果是0,就把锁的变量值设置为1,表示获取到锁,如果不是0,就返回错误信息,表示加锁失败,已经有别的线程获取到锁了。其实,我们既可以基于单个Redis节点来实现,也可以使用多个Redis节点实现。在这两种情况下,锁的可靠性是不一样的。

基于Zookeeper,Zookeeper中的数据是存在内存的,所以相对于Mysql性能上是适合实际环境的,并且基于Zookeeper的顺序节点、临时节点、Watch机制能⾮常好的来实现的分布式锁。

Redisson是一个在Redis的基础上实现的Java驻内存数据网格。它不仅提供了一系列的分布式的Java常用对象,还提供了许多分布式服务,其中包含各种分布式锁的实现。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20230524A02YIF00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券