当前位置: 首页 > news >正文

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

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

pom依赖

  <!-- https://mavenlibs.com/maven/dependency/org.redisson/redisson --><dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>3.23.3</version></dependency><dependency><groupId>de.ruedigermoeller</groupId><artifactId>fst</artifactId><version>2.57</version></dependency>

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


package ws.yunnan.demo.service;import org.redisson.api.RReadWriteLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;@Service // 这个注解的作用是将当前类标识为spring服务加入到spring容器中
public class UserService {@Autowiredprivate RedissonClient redisson;public String addStock(int stock){if (stock<1) stock=1000;redisson.getBucket("product:123").set(stock);return redisson.getBucket("product:123").get().toString();}public String deductStock(){String  redisKey = "product:123";// 注意 新版本getReadWriteLock 这里的锁名称不能是已有的rediskeyfinal RReadWriteLock lock = redisson.getReadWriteLock("plock");lock.writeLock().lock(); // 加锁String msg="";try {// 从redis中获取当前剩余的库存数量int stock = Integer.parseInt(redisson.getBucket(redisKey).get().toString());if (stock > 0) {int realStock = stock - 1;// 更新库存数量redisson.getBucket(redisKey).set(realStock);msg=String.format("当前剩余库存: %d ",realStock);} else {msg="当前库存为空";}}finally {lock.writeLock().unlock(); // 释放锁}System.out.println(msg);return msg;}
}

完整示例项目见:

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

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

http://www.lryc.cn/news/319546.html

相关文章:

  • 0104行列式的性质-行列式-线性代数
  • k8s HPA 自动伸缩机制 (配置,资源限制,)
  • vulhub中GIT-SHELL 沙盒绕过漏洞复现(CVE-2017-8386)
  • SpringBoot+vue3打造企业级一体化SaaS系统
  • 探讨TCP的可靠性以及三次握手的奥秘
  • openai常见的两个错误:BadRequestError和OpenAIError
  • 2核4g服务器够用吗?
  • 数据仓库数据分层详解
  • unity内存优化之AB包篇(微信小游戏)
  • 白话模电:3.三极管(考研面试与笔试常考问题)
  • LeetCode 395. 至少有K个重复字符的最长子串
  • C#重新认识笔记_ FixUpdate + Update
  • Django 解决新建表删除后无法重新创建等问题
  • Qt教程 — 3.3 深入了解Qt 控件:Input Widgets部件(2)
  • 数据分析-Pandas的直接用Matplotlib绘图
  • Jmeter---分布式
  • 安卓基础面试题
  • 如何在 Linux ubuntu 系统上搭建 Java web 程序的运行环境
  • Redis实现分布式锁源码分析
  • SCI 图像处理期刊
  • 数据结构-红黑树
  • 双指针、bfs与图论
  • RabbitMQ高级-高级特性
  • Word粘贴时出现“运行时错误53,文件未找到:MathPage.WLL“的解决方案
  • html元素基本使用
  • PHP+golang开源办公系统CRM管理系统
  • smartmontools-5.43交叉编译Smartctl
  • idea找不到或无法加载主类
  • 2.二进制的方式读写文件
  • Seata的详细解释