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的启动原理和自动配置原理

相关推荐
二哈赛车手8 小时前
新人笔记---ApiFox的一些常见使用出错
java·笔记·spring
栗子~~8 小时前
JAVA - 二层缓存设计(本地缓冲+redis缓冲+广播所有本地缓冲失效) demo
java·redis·缓存
YDS8299 小时前
DeepSeek RAG&MCP + Agent智能体项目 —— RAG知识库的搭建和接口实现
java·ai·springboot·agent·rag·deepseek
未若君雅裁10 小时前
MyBatis 一级缓存、二级缓存与清理机制
java·缓存·mybatis
AI人工智能+电脑小能手10 小时前
【大白话说Java面试题 第65题】【JVM篇】第25题:谈谈对 OOM 的认识
java·开发语言·jvm
阿维的博客日记11 小时前
Nacos 为什么能让配置动态生效?(涉及 @RefreshScope 注解)
java·spring
雨辰AI11 小时前
SpringBoot3 + 人大金仓读写分离 + 分库分表 + 集群高可用 全栈实战
java·数据库·mysql·政务
Mr. zhihao12 小时前
深入解析redis基本数据结构
数据结构·数据库·redis
辰海Coding12 小时前
MiniSpring框架学习-完成的 IoC 容器
java·spring boot·学习·架构
小小编程路12 小时前
C++ 多线程与并发
java·jvm·c++