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

相关推荐
文丑颜不良啊41 分钟前
LeetCode1461~1480题目解析
java·leetcode
2301_780789668 小时前
跨平台适配!SDK 游戏盾兼容全终端游戏场景
java·网络·ddos
m0_639906948 小时前
Redis入门|五种数据结构、使用场景、持久化RDB&AOF
数据结构·数据库·redis
学长毕设9 小时前
基于springboot的食品仓库管理系统
java·spring boot·后端
步行cgn10 小时前
FormHttpMessageConverter 详解:Spring MVC 中表单数据的读写转换器
java·spring·mvc
龙亘川10 小时前
构建城市公共安全数字底座:亘川智城智慧安防系统全维度解读
java·大数据·开发语言·人工智能·信息可视化
金銀銅鐵10 小时前
[Java] 用 CLI 展示 EnumMap 增删键值对时的内部变化
java·源码·ai编程
秋天的怀念_David10 小时前
第二十二夜 · 数字迷雾
java·程序人生·算法
Raas10010 小时前
AI网关部署方案?从部署到上线全流程
java·开发语言·人工智能·gateway·ai网关·企业级ai网关·企业级ai产品
niucloud-admin11 小时前
NIUCLOUD PHP SAAS上门家政使用文档:城市管理
java·前端·php