RedisAtomicInteger并发案例

🍰 个人主页:__Aurora__
🍞文章有不合理的地方请各位大佬指正。
🍉文章不定期持续更新,如果我的文章对你有帮助➡️ 关注🙏🏻 点赞👍 收藏⭐️

RedisAtomicInteger

提供了对整数的原子性操作,确保在多客户端并发访问时数据操作的一致性和原子性。
在秒杀活动中,物品数量是有限的。通过使用 RedisAtomicInteger,可以确保在高并发下物品数量的正确扣减,从而防止超卖现象

测试案例

  1. newFixedThreadPool线程池创建10个线程
  2. 创建任务列表,每个任务操作redis,自增100次
  3. 执行任务后关闭线程池
  4. 记录操作时间
/**
 * 测试 RedisAtomicInteger 多线程下 自增
 * 10个线程 每个线程提交任务  每个任务修改100次RedisAtomicInteger  共执行1000次
 *
 * @throws ExecutionException
 * @throws InterruptedException
 */
@Test
void redisAtomT1() throws ExecutionException, InterruptedException {
    RedisAtomicInteger redisCount = new RedisAtomicInteger("key12345671", redisTemplate.getConnectionFactory(), 0);
    // 创建 100 个线程 并发执行  increment 操作
    long start = System.currentTimeMillis();
    ExecutorService pool = Executors.newFixedThreadPool(10);
    List<Future<?>> futures = new ArrayList<>();
    for (int i = 0; i < 10; i++) {
        Future<?> future = pool.submit(() -> {
            // 配额码原子变量值增加,每次增加1
            for (int j = 0; j < 100; j++) {
                int count = redisCount.incrementAndGet();
                System.out.println(Thread.currentThread().getName() + ": " + count);
            }
        });
        futures.add(future);
    }
    // 将会阻塞主线程直到异步任务完成
    // 等待所有任务完成
    for (Future<?> future : futures) {
        future.get();
    }

    // 关闭线程池
    pool.shutdown();

    // 检查Redis中的值
    long finalCount = redisCount.get();
    System.out.println("Final Redis count: " + finalCount);
    // 应该输出 100
    assertEquals(1000L, finalCount);

    long endtime = System.currentTimeMillis();
    System.out.println("开始时间:" + start);
    System.out.println("结束时间:" + endtime);
    System.out.println("间隔:" + (endtime - start) + "毫秒");
}

执行结果:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/760101.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

《昇思25天学习打卡营第14天 | 昇思MindSpore基于MindNLP+MusicGen生成自己的个性化音乐》

14天 本节学了基于MindNLPMusicGen生成自己的个性化音乐。 MusicGen是来自Meta AI的Jade Copet等人提出的基于单个语言模型的音乐生成模型&#xff0c;能够根据文本描述或音频提示生成高质量的音乐样本。 MusicGen模型基于Transformer结构&#xff0c;可以分解为三个不同的阶段…

C++: 如何用C语言实现C++的虚函数机制?

前言 在 googletest的源码中&#xff0c;看到gtest-matchers.h 中实现的MatcherBase 类自定义了一个 VTable&#xff0c;这种设计实现了一种类似于C虚函数的机制。C中的虚函数机制实质上就是通过这种方式实现的&#xff0c;本文用c语言自定义虚函数表VTable实现了一下virtual的…

等保主机测评防骗指南(资产调研)

你是否测评时常被运维给忽悠&#xff1f;是否觉得以下的对话耳熟&#xff1f; 你&#xff1a;您好&#xff0c;请问你们的主机资产有哪些&#xff0c;包括服务器、数据库、中间件、应用系统等。 甲&#xff1a;我们资产就这两台服务器&#xff0c;数据库什么的都这上面&#…

OpenGL3.3_C++_Windows(25)

阴影失真:阴影的不真实感 条纹样式&#xff1a; 首先理解采样原理&#xff1a;同光的视角下&#xff0c;渲染一张深度图&#xff0c;每个像素&#xff0c;存储同一射线下的深度值&#xff08;不断更新深度缓冲的结果&#xff09;&#xff0c;即最近片段的深度。接着&#xff0…

hadoop词频统计

1 Hadoop 安装与伪分布的搭建 2 Hadoop词频统计 此文章基于搭建好hadoop之后做的词频统计实验&#xff0c;以上是链接为搭建hadoop的教程 目录 1 HDFS 文件系统常用命令 2 词频统计实验准备工作 2.1 启动hadoop 关闭防火墙 2.2 查看图形化界面 2.3 文件上传 3 词频统计…

isspace()方法——判断字符串是否只由空格组成

自学python如何成为大佬(目录): https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 语法参考 isspace()方法用于判断字符串是否只由空格组成。isspace()方法的语法格式如下&#xff1a; str.isspace() 如果字符串中只包含空格&…

【Unity设计模式】✨使用 MVC 和 MVP 编程模式

前言 最近在学习Unity游戏设计模式&#xff0c;看到两本比较适合入门的书&#xff0c;一本是unity官方的 《Level up your programming with game programming patterns》 ,另一本是 《游戏编程模式》 这两本书介绍了大部分会使用到的设计模式&#xff0c;因此很值得学习 本…

【算法】5分钟了解如何使用PCA主成份分析

本文来自《老饼讲解-BP神经网络》https://www.bbbdata.com/ 目录 一、什么是PCA1.1.PCA的思想1.2.PCA的数学表示 二、什么是PCA的主成份与方差2.1.主成份的方差2.2.主成份的命名 三、如何使用PCA3.1.主成份的代码实现 主成份分析全称为PCA Principle Component Analysis ,它的主…

Linux虚拟串口设置

VSPD虚拟串口软件安装及使用 一、软件安装 1、Configure Virtual Serial Port Driver(VSPD) 1.1 首先下载 Configure Virtual Serial Port Driver(VSPD) 软件 链接&#xff1a;https://pan.baidu.com/s/11aGc2aHGUew5QZ0XhaWXJw 提取码&#xff1a;rmd7 1.2 安装时注意将…

计算机基础之汇编语言学习笔记

学习来源&#xff1a;b站各种学习资料 前置知识&#xff1a;计算机组成原理等知识 学习参考的资源 汇编语言编程的速成指南[上]~从零开始的期末抢救计划 &#xff08;8086汇编&#xff09;_哔哩哔哩_bilibili 链接: https://pan.baidu.com/s/1tg_ZW7VD3TS_s1v_EjS89w?pwdak6…

2029年AI服务器出货量将突破450万台,AI推理服务器即将爆发式增长

在2020年&#xff0c;新冠疫情与远程办公模式的兴起推动了所有类型服务器的出货量达到峰值&#xff0c;随后几年里&#xff0c;除了AI服务器之外的所有类别都回归到了正常水平。 根据Omdia的研究数据&#xff0c;AI服务器的出货量在2020年急剧上升&#xff0c;并且至今未显示出…

运筹系列93:VRP精确算法

1. 基础版本 定义 x i j k x_{ijk} xijk​为边 i j ij ij是否由车辆 k k k去运输。如果有时间窗约束的话&#xff0c;再加上一个变量 c i k c_{ik} cik​即可&#xff0c;表示第k辆车到达节点i时的时间点。 第一类客户流量约束&#xff0c;要求每个点都有1个入度和1个出度&…

ios13多窗口(UIWindowScene)学习笔记

ios13引入了UIWindowScene类、UIWindowSceneDelegate协议以便支持多窗口功能&#xff0c;但其适用于ipad&#xff0c;不适用于iphone&#xff0c;因为iphone不支持多窗口功能。注意&#xff0c;这里说的窗口不是UIWindow&#xff0c;而是UIWindowScene。 ios13前后的app的UI架…

AI陪伴产品的情感设计:从孤独感到恋爱感评分:9/10

本文主要阐述三个话题&#xff1a; 1. 市面上有哪些AI陪伴产品&#xff1f; 2. 我们团队要怎么做&#xff1f; 3. 为什么要做&#xff1f; 市面上有哪些陪伴类产品&#xff1f; Role-play&#xff08;角色扮演&#xff09; 在当前市场上&#xff0c;有不少以角色扮演为核心的…

Wails 安装初体验

文章目录 Wails 安装说明1. 系统要求2. 安装步骤3. 构建应用 结论 Wails 安装说明 Wails 是一个用于构建桌面应用的 Go 框架&#xff0c;结合了现代前端技术。以下是安装步骤&#xff1a; 1. 系统要求 Go 1.16 或更高版本Node.js 和 npm可选&#xff1a;适用于 Windows、mac…

iconfont-阿里巴巴矢量图标库 在vue项目使用记录

官网地址&#xff1a;https://www.iconfont.cn/manage/index?manage_typemyprojects&projectId4539761 第一步&#xff1a; 下载资源 ->解压到项目文件夹 第二步 在项目中main.ts 或者main.js 引入资源 import //assets/iconfont/font/iconfont.js; import //assets…

java基础知识点全集

JAVA的所有知识点 一、基础的数组、数据类型、输入输出二、类与对象1. 三大特征&#xff08;1&#xff09; 封装&#xff08;2&#xff09;继承&#xff08;3&#xff09;多态 2. 类的实例化&#xff08;1&#xff09; 类通过NEW来创建&#xff08;2&#xff09; 类的继承&…

python解锁图片相似度的神奇力量

在这个信息爆炸的时代,图片成为了我们传递信息、表达情感和记录生活的重要方式。然而,面对海量的图片资源,如何快速准确地找到相似的图片,成为了一个亟待解决的问题。现在,让我们为您揭开图片相似度的神秘面纱,带您领略这一创新技术的魅力! 图片相似度技术,就像是一位…

【多媒体】Java实现MP4视频播放器【JavaFX】【音视频播放】

在Java中播放视频可以使用多种方案&#xff0c;最常见的是通过Swing组件JFrame和JLabel来嵌入JMF(Java Media Framework)或Xuggler。不过&#xff0c;JMF已经不再被推荐使用&#xff0c;而Xuggler是基于DirectX的&#xff0c;不适用于跨平台。而且上述方案都需要使用第三方库。…

医院管理系统带万字文档医院预约挂号管理系统基于spingboot和vue的前后端分离java项目java课程设计java毕业设计

文章目录 仓库管理系统一、项目演示二、项目介绍三、万字项目文档四、部分功能截图五、部分代码展示六、底部获取项目源码带万字文档&#xff08;9.9&#xffe5;带走&#xff09; 仓库管理系统 一、项目演示 医院管理系统 二、项目介绍 基于springbootvue的前后端分离医院管…