SpringBoot Redis分布式锁的正确实现方式(6)
导读:SpringBoot,RedisLockClient 最后,还需要提供一个客户端给方便使用。 @Componentpublic class RedisLockClient { @Autowired private StringRedisTemplate redisTemplate; public Lock getLock(String name
SpringBoot
RedisLockClient
最后,还需要提供一个客户端给方便使用。
@Component
public class RedisLockClient {
@Autowired
private StringRedisTemplate redisTemplate;
public Lock getLock(String name) {
return new DistributedLock(name, redisTemplate);
}
}
单元测试来一个。
@Slf4j
@SpringBootTest(classes = RedisApplication.class)
public class RedisLockTest {
@Autowired
private RedisLockClient redisLockClient;
@Test
public void testLockSuccess() throws InterruptedException {
Lock lock = redisLockClient.getLock("order:pay");
try {
boolean isLock = lock.tryLock(10, 30, TimeUnit.SECONDS);
if (!isLock) {
log.warn("加锁失败");
return;
}
TimeUnit.SECONDS.sleep(3);
log.info("业务逻辑执行完成");
} finally {
lock.unlock();
}
}
}
有两个点需要注意。
- 释放锁的代码一定要放在
finally{}块中。否则一旦执行业务逻辑过程中抛出异常,程序就无法执行释放锁的流程。只能干等着锁超时释放。 - 加锁的代码应该写在
try {}代码中,放在 try 外面的话,如果执行加锁异常(客户端网络连接超时),但是实际指令已经发送到服务端并执行,就会导致没有机会执行解锁的代码。
小白:“不念,这个方案你管它叫青铜级别而已,这么说还有王者、超神版?我们公司还用错误版分布式锁,难怪有时候出现重复订单,是我肤浅了。”
赶紧将这个方案替换原来的错误或者残血版的Redis分布式锁吧。
以上是IT袋网网关于SpringBoot 及其 Redis分布式锁的正确实现方式的具体介绍,小编希望给网友们带来一些知识。
相关阅读
-
b2b推广网站有哪些 垂直b2b电商平台推荐
跟大家聊一聊b2b推广网站有哪些和垂直b2b电商平台推荐方面的内容,下面小编为您详细解答 最近,很多小伙伴都反馈给我。我想知道哪些B2B网站在市场上做得很好。以下是IT袋网小编收集的全
-
前端开发工程师是做什么的 web前端的工作内容
IT袋网为大家说一说前端开发工程师是做什么的和web前端的工作内容方面的讲解,请看下面详细的介绍。 随着Internet的发展和多个终端的普及,前端开发工程师逐渐受到欢迎,但是前端开发工程
-
什么是Ceph 有什么特点?
如果想了解什么是CephIT技巧方面的经验,相关内容具体如下: 概述 Ceph是当前非常流行的开源分布式存储系统,具有高扩展性、高性能、高可靠性等优点,同时提供 块存储服务 (rbd)、 对象存储
-
[网络工程师]-网络规划与设计-通信规范分析
相对于大多数人[网络工程师]-网络规划与设计-通信规范分析方面的介绍,下面为详细的介绍。 在网络分析和设计过程中,通信规范分析处于第二个阶段,通过分析网络通信流量和通信模式,发


