您当前的位置:首页 > 电脑百科 > 数据库 > Redis

使用redisson实现分布式秒杀功能

时间:2022-09-01 14:40:11  来源:今日头条  作者:留住此刻

redisson相比原生的jredis具有排队的功能,不一致秒杀时,一时获取锁失败就返回失败。

秒杀的原理就是使用redis的分布式锁的功能,保证每次抢购不会出现超卖的情况

 

1 引入pom


        <dependency>
            <groupId>org.redisson</groupId>
            <artifactId>redisson</artifactId>
            <version>3.16.8</version>
        </dependency>

2 完整代码及解析如下

package htmdemo;
import com.ruoyi.common.core.redis.RedisCache;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import JAVA.util.ArrayList;
import java.util.concurrent.*;
/**
 * 使用redisson来实现分布式的秒杀功能
 * @author Administrator
 *
 */
@Component
public class ReddisonTest {
	@Autowired
    private RedisCache redisCache;

    @Autowired
    RedissonClient redissonClient;
    /**
     * 秒杀
     * @throws ExecutionException
     * @throws InterruptedException
     */
    public void secondkill() throws ExecutionException, InterruptedException {

    	 //加锁的实现方式
        ExecutorService exec = Executors.newFixedThreadPool(50);
        ArrayList<Future<Integer>> futures = new ArrayList<>();
        RLock stockLock = redissonClient.getLock("stockLock");
        for (int i = 0; i < 50; i++) {
            Future<Integer> fsubmit = exec.submit(() -> {
                int doneCount = 0;//初始化做的任务为0
                if(numLock.tryLock(1,1,TimeUnit.SECONDS)){
                	//获取到锁,则做业务
                	
                	/**
                	 * trylock(param1,param2,param3):尝试获取锁
                     * @param1:等待时间(在这个时间内不停获取锁)
                     * @param2:获取成功后锁的有效时间
                     * @param3:时间单位(秒/分/...)
                	*/
                	
                    int stock = redisCache.getCacheObject("stock");
                    stock--;
                    redisCache.setCacheObject("stock", stock);
                    doneCount++;
                    //isHeldByCurrentThread()的作用是查询当前线程是否保持此锁定
                    if(numLock.isHeldByCurrentThread()){
                        numLock.unlock();
                    }
                }
                return doneCount;
            });
            futures.add(fsubmit);
        }

        Integer saleToal = 0;

        for (int i = 0; i < futures.size(); i++) {
            Future<Integer> count = futures.get(i);
            saleToal = saleToal + count.get();
        }
        System.out.println("最终的卖出:"+saleToal);
    }
}

 

以上的核心代码为

//得到锁对象
RLock stockLock = redissonClient.getLock("stockLock");
//尝试获取锁
if(numLock.tryLock(1,1,TimeUnit.SECONDS))


Tags:redisson   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
Redisson杂谈,你学到了什么?
一.Redisson 简介Redisson 是一个基于 Netty 通信框架的高性能 Redis 客户端, 实现了分布式和可扩展的 Java 数据结构,提供很多分布式相关操作服务以及大量便利的工具方法,让...【详细内容】
2023-10-16  Search: redisson  点击:(299)  评论:(0)  加入收藏
Redisson锁机制源码分析
1、了解分布式锁的特性 1、锁的互斥性 也就是说,在任意时刻,只能有一个客户端能获取到锁,不能同时有两个或多个客户端获取到锁。 简单来说,就比如上厕所,一个厕所只有一个坑位...【详细内容】
2023-08-28  Search: redisson  点击:(259)  评论:(0)  加入收藏
Springboot+Redisson封装分布式锁Starter
我们将分布式锁基于缓存扩展了一版,也就是说本starter即有分布式缓存功能,又有分布式锁功能。而注解版的分布式锁能够解决大多数场景的并核问题,小粒度的Lock锁方式补全其他场...【详细内容】
2023-08-28  Search: redisson  点击:(254)  评论:(0)  加入收藏
Redisson看门狗机制你了解多少
前言谈到Redisson就不得不说Redis了,一想到Redis就不得不想到并发编程锁机制,一想到锁机制那么就不能不考虑一个很头疼的问题,如何保证原子性的问题,高QPS请求量的系统对每次执...【详细内容】
2023-08-22  Search: redisson  点击:(195)  评论:(0)  加入收藏
Jedis 与 Redisson 对比有什么优缺点?
Jedis 和 Redisson 都是 Java 开发者广泛使用的 Redis Java 客户端之一。它们能够很好地与 Redis 数据库进行交互,提供丰富的功能和灵活的配置选项。虽然它们都可以用于在 Ja...【详细内容】
2023-05-18  Search: redisson  点击:(439)  评论:(0)  加入收藏
一文看懂Redisson分布式锁的Watchdog机制源码实现
一、 分布式锁简介分布式锁是一种常见的协调分布式系统的机制,在分布式环境下保证数据的一致性和可用性。分布式锁的实现有很多种方式,其中较为常见的方式是利用Redis实现分布...【详细内容】
2023-04-12  Search: redisson  点击:(247)  评论:(0)  加入收藏
使用redisson实现分布式秒杀功能
redisson相比原生的jredis具有排队的功能,不一致秒杀时,一时获取锁失败就返回失败。秒杀的原理就是使用redis的分布式锁的功能,保证每次抢购不会出现超卖的情况 1 引入pom...【详细内容】
2022-09-01  Search: redisson  点击:(468)  评论:(0)  加入收藏
厉害了,原来 Redisson 这么好用
Redis 是最流行的 NoSQL 数据库是解决方案之一,而 Java 是世界上最流行(注意,我没有说“最好”)的编程语言之一。虽然两者看起来很自然地在一起“工作”,但是要知道,Redis 其实并...【详细内容】
2022-06-17  Search: redisson  点击:(740)  评论:(0)  加入收藏
聊一聊Redis官方置顶推荐的Java客户端Redisson
写这篇的时候,相信有很多朋友还在用Jedis作为Redis的客户端,我不禁有很多问号,Jedis还香吗?如果你早些年说它香我信,但是都2020年了,它真的不那么香了。那为什么还继续使用它呢?大...【详细内容】
2020-10-12  Search: redisson  点击:(414)  评论:(0)  加入收藏
Redis的三个框架:Jedis,Redisson,Lettuce
Jedis api 在线网址:http://tool.oschina.net/uploads/apidocs/redis/clients/jedis/Jedis.htmlredisson 官网地址:https://redisson.org/redisson git项目地址:https://githu...【详细内容】
2019-11-11  Search: redisson  点击:(1120)  评论:(0)  加入收藏
▌简易百科推荐
16个Redis常见使用场景总结
来源:blog.csdn.net/qq_39938758/article/details/105577370目录 缓存 数据共享分布式 分布式锁 全局ID 计数器 限流 位统计 购物车 用户消息时间线timeline 消息...【详细内容】
2024-04-11    书圈  Tags:Redis   点击:(4)  评论:(0)  加入收藏
Linux获取Redis 性能指标方法
一、监控指标&Oslash; 性能指标:Performance&Oslash; 内存指标: Memory&Oslash; 基本活动指标:Basic activity&Oslash; 持久性指标: Persistence&Oslash; 错误指标:Error二、监...【详细内容】
2024-04-11  上海天正信息科技有限    Tags:Redis   点击:(4)  评论:(0)  加入收藏
Redis与缓存一致性问题
缓存一致性问题是在使用缓存系统,如Redis时经常遇到的问题。当数据在原始数据源(如数据库)中发生变化时,如何确保缓存中的数据与数据源保持一致,是开发者需要关注的关键问题。一...【详细内容】
2024-04-11  后端Q    Tags:Redis   点击:(3)  评论:(0)  加入收藏
Redis 不再 “开源”,未来采用 SSPLv1 和 RSALv2 许可证
Redis 官方于21日宣布修改开源协议 &mdash;&mdash; 未来所有版本都将使用 “源代码可用” 的许可证 (source-available licenses)。具体来说,Redis 将不再遵循 BSD 3-Clause...【详细内容】
2024-03-27  dbaplus社群    Tags:Redis   点击:(14)  评论:(0)  加入收藏
Redis“叛逃”开源,得罪了几乎所有人
内存数据库供应商Redis近日在开源界砸下了一块“巨石”。Redis即将转向双许可模式,并实施更为严格的许可条款。官方对此次变更的公告直截了当:从Redis 7.4版本开始,Redis将在Re...【详细内容】
2024-03-25    51CTO  Tags:Redis   点击:(10)  评论:(0)  加入收藏
如何使用 Redis 实现消息队列
Redis不仅是一个强大的内存数据存储系统,它还可以用作一个高效的消息队列。消息队列是应用程序间或应用程序内部进行异步通信的一种方式,它允许数据生产者将消息放入队列中,然...【详细内容】
2024-03-22  后端Q  微信公众号  Tags:Redis   点击:(18)  评论:(0)  加入收藏
Redis不再 “开源”
Redis 官方今日宣布修改开源协议 &mdash;&mdash; 未来所有版本都将使用 “源代码可用” 的许可证 (source-available licenses)。具体来说,Redis 将不再遵循 BSD 3-Clause 开...【详细内容】
2024-03-21  OSC开源社区    Tags:Redis   点击:(11)  评论:(0)  加入收藏
在Redis中如何实现分布式锁的防死锁机制?
在Redis中实现分布式锁是一个常见的需求,可以通过使用Redlock算法来防止死锁。Redlock算法是一种基于多个独立Redis实例的分布式锁实现方案,它通过协调多个Redis实例之间的锁...【详细内容】
2024-02-20  编程技术汇    Tags:Redis   点击:(49)  评论:(0)  加入收藏
手动撸一个 Redis 分布式锁
大家好呀,我是楼仔。今天第一天开工,收拾心情,又要开始好好学习,好好工作了。对于使用 Java 的小伙伴,其实我们完全不用手动撸一个分布式锁,直接使用 Redisson 就行。但是因为这些...【详细内容】
2024-02-19  楼仔  微信公众号  Tags:Redis   点击:(40)  评论:(0)  加入收藏
工作中Redis有哪些好用的运维工具
工作中使用 Redis 时,如果大家公司没有专业运维,可能开发人员就会面临这些运维的工作,包括 Redis 的运行状态监控,数据迁移,主从集群、切片集群的部署和运维等等。本文我就从这三...【详细内容】
2024-02-06  waynaqua    Tags:Redis   点击:(56)  评论:(0)  加入收藏
站内最新
站内热门
站内头条