您的位置:首页 > 健康 > 美食 > 动漫设计与制作课程_wap是什么意思啊_全网营销平台_建站系统推荐

动漫设计与制作课程_wap是什么意思啊_全网营销平台_建站系统推荐

2025/3/4 20:05:24 来源:https://blog.csdn.net/m0_60925013/article/details/145931600  浏览:    关键词:动漫设计与制作课程_wap是什么意思啊_全网营销平台_建站系统推荐
动漫设计与制作课程_wap是什么意思啊_全网营销平台_建站系统推荐

引言

在上个篇章中,我们通过redis手撸了一套分布式锁,但是最后也提到了它依然存在不完美的地方。那么有没有更简单和靠谱的实现方式。当然有,在本篇章中,我们将讲解如何使用redisson框架实现分布式锁以及理解它的源码。

什么是redisson

一句话总结-redis的高性能客户端,我们选择它是因为它内部已经封装好了很多锁的实现,详细介绍可以通过redisson的Github主页来查看。

在这里插入图片描述

SpringBoot整合redisson

我们继续以扣减库存的案例为例,看看如何通过SpringBoot来整合redisson,从而解决并发问题。

1.引入依赖

redisson的Github的readme里我们可以找到它的Quick start,里面就有最新版本的引入指引,当然你也可以在maven的中央仓库中找到。

在这里插入图片描述## 2.配置对象

接着将redisson的客户端对象注册成Bean,方便我们在别的service里可以注入使用,代码如下:

import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class RedissonConfig {@Beanpublic RedissonClient redissonClient(){Config config = new Config();config.useSingleServer().setAddress("redis://127.0.0.1:6379");return Redisson.create(config);}}

3.代码实现

redisson的封装非常完善,我们只需要获取锁、加锁、解锁即可,改造后的代码如下:


@Autowired
private RedissonClient redissonClient;public String deductStockRedissonLock(Long goodsId, Integer count) {RLock lock = null;try {lock = redissonClient.getLock("lock" + goodsId);lock.lock();//1.查询商品库存数量String stock = template.opsForValue().get("stock" + goodsId);if (StringUtil.isNullOrEmpty(stock)) {return "商品不存在!";}int lastStock = Integer.parseInt(stock);//2.判断库存数量是否足够if (lastStock < count) {return "库存不足!";}//3.如果库存数量足够,则去扣减库存template.opsForValue().set("stock" + goodsId, String.valueOf(lastStock - count));return "扣减库存成功";} catch (Exception e) {throw new RuntimeException(e);} finally {if (lock != null) {lock.unlock();}}
}

在上个章节中我们考虑的锁重入、锁超时、锁阻塞等问题,这个时候我们不再需要考虑,它的底层都已经为我们完成了封装,我们只需要用即可,相关实现的源码我们会在后续章节中为大家带来讲解。

4.测试

改造完成后我们启动服务,先准备5000个库存,如下:

在这里插入图片描述
接着通过JMeter进行压测:

在这里插入图片描述
此时,库存剩余数量也为0,说明也无并发问题。

在这里插入图片描述

小结

本篇通过对redisson的整合,我们简化了分布式锁的实现,不用再关注各种边界情况,但是它做了什么样的封装也是需要我们学习的。因此,在后续的几个篇章里,将会为大家剖析redisson有关锁实现的源码。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com