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

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

pom依赖

XML 复制代码
  <!-- 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>

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

java 复制代码
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 {
    @Autowired
    private 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 这里的锁名称不能是已有的rediskey
        final 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的启动原理和自动配置原理

相关推荐
不知名的老吴21 小时前
线程的生命周期之线程“插队“
java·开发语言·python
ANnianStriver21 小时前
PetLumina-02-后端开发与前后端联调
java·ai·sa-token
云烟成雨TD21 小时前
Spring AI 1.x 系列【56】用大模型评判大模型:递归顾问实现自动化评估方案
人工智能·spring·自动化
杨了个杨898221 小时前
Keepalived + Nginx + HAProxy 高可用架构部署实战案例
java·nginx·架构
陈鋆1 天前
Spring AI Framework(二:模块分析)
spring·ai
马士兵教育1 天前
Java还有前景吗?Java+AI大模型学习路线及项目?
java·人工智能·python·学习·机器学习
snow@li1 天前
Java:理解 Gradle / 后端项目的管家 / 打包SpringBoot 应用 / 完成编译、下载依赖、运行测试、打包 JAR/WAR / 速查表
java
云烟成雨TD1 天前
Spring AI 1.x 系列【52】可观测集成 SkyWalking
人工智能·spring·skywalking
云烟成雨TD1 天前
Spring AI 1.x 系列【57】动态工具发现:Tool Search Tool
java·人工智能·spring
zfoo-framework1 天前
[修改代码使用]codex官方app中使用中转(不需要cc-switch) 1.config.toml 2.sk方式登录
java