当前位置:   article > 正文

Java项目利用Redisson实现真正生产可用高并发秒杀功能 支持分布式高并发秒杀

Java项目利用Redisson实现真正生产可用高并发秒杀功能 支持分布式高并发秒杀

Java中的高并发秒杀场景下我们可以使用redisson来实现高并发秒杀功能, 以下就是一个可用于生产环境的高并发秒杀示例代码:

pom依赖

  1. <!-- https://mavenlibs.com/maven/dependency/org.redisson/redisson -->
  2. <dependency>
  3. <groupId>org.redisson</groupId>
  4. <artifactId>redisson</artifactId>
  5. <version>3.23.3</version>
  6. </dependency>
  7. <dependency>
  8. <groupId>de.ruedigermoeller</groupId>
  9. <artifactId>fst</artifactId>
  10. <version>2.57</version>
  11. </dependency>

生产可用高并发秒杀代码示例:

  1. package ws.yunnan.demo.service;
  2. import org.redisson.api.RReadWriteLock;
  3. import org.redisson.api.RedissonClient;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.stereotype.Service;
  6. @Service // 这个注解的作用是将当前类标识为spring服务加入到spring容器中
  7. public class UserService {
  8. @Autowired
  9. private RedissonClient redisson;
  10. public String addStock(int stock){
  11. if (stock<1) stock=1000;
  12. redisson.getBucket("product:123").set(stock);
  13. return redisson.getBucket("product:123").get().toString();
  14. }
  15. public String deductStock(){
  16. String redisKey = "product:123";
  17. // 注意 新版本getReadWriteLock 这里的锁名称不能是已有的rediskey
  18. final RReadWriteLock lock = redisson.getReadWriteLock("plock");
  19. lock.writeLock().lock(); // 加锁
  20. String msg="";
  21. try {
  22. // 从redis中获取当前剩余的库存数量
  23. int stock = Integer.parseInt(redisson.getBucket(redisKey).get().toString());
  24. if (stock > 0) {
  25. int realStock = stock - 1;
  26. // 更新库存数量
  27. redisson.getBucket(redisKey).set(realStock);
  28. msg=String.format("当前剩余库存: %d ",realStock);
  29. } else {
  30. msg="当前库存为空";
  31. }
  32. }finally {
  33. lock.writeLock().unlock(); // 释放锁
  34. }
  35. System.out.println(msg);
  36. return msg;
  37. }
  38. }

完整示例项目见:

Gitee: myspringboot-app: 自己动手实现的 SpringbootApplication 启动器项目, 用于学习springboot的启动原理和自动配置原理. 主要用于理解学习springboot的启动, 自动配置原理, 虽然很简单,但是对于新手来说还是很有参考学习价值的!

Github: GitHub - tekintian/myspringboot-app: 自己动手实现的 SpringbootApplication 启动器项目, 用于学习springboot的启动原理和自动配置原理

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/256926
推荐阅读
相关标签
  

闽ICP备14008679号