redisson支持高并发的RBucket

作用:RBucket桶可存储任意对象,可在高并发场景下进行唯一更新。

示例:创建20个线程并发更新桶对象,只有一个执行了更新操作。

先添加redisson的依赖。

<dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>3.20.0</version>
</dependency>
public static void main(String[] args) {Config config = new Config();config.useSingleServer().setAddress("redis://localhost:6379").setPassword("123456");RedissonClient client = Redisson.create(config);RCountDownLatch countDownLatch = client.getCountDownLatch("countDownLatch");countDownLatch.trySetCount(20);RBucket<String> bucket = client.getBucket("bucket");bucket.set("桶测试"+1);String oldValue=bucket.get();ExecutorService executorService= Executors.newFixedThreadPool(20);for (int i=0;i<20;i++){executorService.submit(() -> {System.out.println("线程:" + Thread.currentThread().getId() + ",桶:" + bucket.get());if (bucket.compareAndSet(oldValue, "桶测试 " + 2)) {System.out.println("线程" + Thread.currentThread().getId() + "更新了bucket的值");}countDownLatch.countDown();});}try {countDownLatch.await();}catch (Exception e){e.printStackTrace();}System.out.println("更新后的桶对象为:"+bucket.get());executorService.shutdown();
}

接口文档:

public interface RBucket<V> extends RExpirable, RBucketAsync<V> {void set(V var1);                                  //设置桶存储的对象void set(V var1, long var2, TimeUnit var4);        //设置桶存储的对象,设置操作的超时时间var2boolean trySet(V var1);                            //尝试设置桶的新值boolean trySet(V var1, long var2, TimeUnit var4);  //尝试设置桶的新值,设置超时时间var2boolean compareAndSet(V var1, V var2);             //原子替换桶的新值为var2long size();                                       //桶存储对象的大小V get();                                           //返回桶存储的对象V getAndDelete();                                  //返回并删除桶存储的对象V getAndSet(V var1);                               //返回桶的旧值,设置新值V getAndSet(V var1, long var2, TimeUnit var4);     //返回桶的旧值,设置新值,设置操作的超时时间var2}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c# - - - Application.StartupPath(程序安装目录)和Environment.CurrentDirectory(程序工作目录)

Application.StartupPath 应用程序的安装目录&#xff0c;不会改变。 在C:\Users\Administrator\source\repos\ConsoleApp6\bin\Debug目录中&#xff0c;运行ConsoleApp6.exe。 安装目录为&#xff1a;C:\Users\Administrator\source\repos\ConsoleApp6\bin\Debug 在C:\Users…

开发板和电脑相互ping,电脑可以ping开发板,但是开发板ping不通电脑

开发板和电脑相互ping&#xff0c;电脑可以ping开发板&#xff0c;但是开发板ping不通电脑 可能有以下几种原因&#xff1a; 电脑的防火墙设置拦截了开发板的ping请求&#xff0c;需要关闭或者配置防火墙&#xff0c;允许开发板的IP地址访问。开发板和电脑的IP地址不在同一网段…

​软考-高级-系统架构设计师教程(清华第2版)【第5章 软件工程基础知识(190~233)-思维导图】​

软考-高级-系统架构设计师教程&#xff08;清华第2版&#xff09;【第5章 软件工程基础知识&#xff08;190~233&#xff09;-思维导图】 课本里章节里所有蓝色字体的思维导图

ubuntu xrdp远程登录一直弹出Authentication required. System policy prevents WiFi scans

windows远程登录以后想要连接一下wifi&#xff0c;一定弹出Authentication required&#xff0c;关都关不掉&#xff0c;wifi也连不上。 使用以下方法后完美解决 sudo vi /etc/polkit-1/localauthority/50-local-d/network.pkla 加入如下内容&#xff1a; [Allow Wifi Scan…

050-第三代软件开发-软件部署脚本(二)

第三代软件开发-软件部署脚本(二) 文章目录 第三代软件开发-软件部署脚本(二)项目介绍软件部署脚本(二) 关键字&#xff1a; Qt、 Qml、 bash、 shell、 脚本 项目介绍 欢迎来到我们的 QML & C 项目&#xff01;这个项目结合了 QML&#xff08;Qt Meta-Object Languag…

以程序员的身份使用curl获取速卖通详情

作为一名程序员&#xff0c;我们经常需要和各种API接口打交道。在电商领域&#xff0c;速卖通是一个非常受欢迎的平台。本文将介绍如何使用curl工具通过速卖通的API接口获取商品详情。 一、准备工作 在开始之前&#xff0c;请确保您已完成以下准备工作&#xff1a; 注册速卖…

Django视图层解析

Django视图&#xff08;View&#xff09;是Django Web框架中负责处理HTTP请求和返回HTTP响应的组件。视图是一段Python代码&#xff0c;接收HTTP请求作为输入&#xff0c;处理请求并返回HTTP响应作为输出。Django视图的主要目的是实现Web应用程序的业务逻辑&#xff0c;将模型和…

外汇天眼:「外汇回撤」这术语是指什么?

"外汇回撤"是外汇交易中一个常见的专业术语。对于许多投资者&#xff0c;尤其是初学者来说&#xff0c;可能并不十分理解这个术语的实质。下面我们将详细介绍外汇回撤的含义。 外汇回撤通常被称为"外汇百分比回撤"。在外汇市场出现强烈趋势波动时&#xf…

hive数据质量规范

当谈到大数据处理和分析时&#xff0c;数据质量成为至关重要的因素。Hive作为一种常用的大数据查询和分析工具&#xff0c;也需要遵循一定的数据质量规范以确保数据的准确性、一致性和可靠性。本文将介绍Hive数据质量规范的相关内容&#xff0c;并提供代码示例来说明如何在Hive…

Java 14 中, 对 NullPointerException 打印异常信息的改进增强

Java 14 中&#xff0c; 对 NullPointerException 打印异常信息的改进增强&#xff0c;开启方法 -XX:ShowCodeDetailsInExceptionMessages

Ubuntu中安装R语言环境并在jupyter kernel里面增加R kernel

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️ &#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

文件上传 [SUCTF 2019]CheckIn1

打开题目 我们用cmd curl --head url 查看网站使用的是什么服务器 此题用的是openresty&#xff0c;OpenResty 是一个基于 Nginx 与 Lua 的高性能 Web 平台 我们上传php&#xff0c;phtml的一句话木马都显示不合法 那我们试试传a.jpg的一句话木马 显示我们一句话木马内容里面…

java面试常问

文章目录 java 基础1、JDK 和 JRE的区别2、 和equals的区别3、String、StringBuffer、StringBuilder4、String str “a”、 new String(“a”)一样吗&#xff1f;5、ArrayList 和 LinkedList的区别&#xff1f;6、HashMap的原理与实现6.1、容量与扩容6.2、扩容机制 7、HashMa…

MatrixOne完成与欧拉、麒麟信安的兼容互认

近日&#xff0c;超融合异构云原生数据库MatrixOne企业版软件V1.0完成了与欧拉开源操作系统&#xff08;openEuler简称“欧拉”&#xff09;、麒麟信安操作系统系列产品和虚拟化平台的相互兼容认证&#xff0c;通过了欧拉兼容性测评&#xff0c;获得了《openEuler技术测评证书》…

flutter背景图片设置

本地图片设置 1、在配置文件pubspec.yaml中&#xff0c;设置以下代码 assets:- assets/- assets/test/2、如果目录中没有assets文件夹&#xff0c;则创建一个文件夹&#xff0c;并且取名为assets&#xff0c;在此文件夹中存放图片资源即可&#xff0c;如果想分文件夹管理&…

c语言中,/100和/100.0的区别是什么?

c语言中&#xff0c;/100和/100.0的区别是什么&#xff1f; 应该是整数除法和浮点数除法的区别吧。/100 时&#xff0c;结果只会保留整数部分&#xff0c;余数会丢弃。 最近很多小伙伴找我&#xff0c;说想要一些c语言的资料&#xff0c;然后我根据自己从业十年经验&#xff0…

2023年亚太杯数学建模思路 - 复盘:人力资源安排的最优化模型

文章目录 0 赛题思路1 描述2 问题概括3 建模过程3.1 边界说明3.2 符号约定3.3 分析3.4 模型建立3.5 模型求解 4 模型评价与推广5 实现代码 建模资料 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 描述 …

【Maven教程】(十一):使用 Maven 构建 Web应用 —— 使用 jetty-maven-plugin 进行测试、使用 Cargo 实现自动化部署~

Maven 使用 Maven 构建 Web应用 1️⃣ Web 项目的目录结构2️⃣ account-service2.1 account-service的 POM2.2 account-service 的主代码 3️⃣ account-web3.1 account-web 的POM3.2 account-web 的主代码 4️⃣ 使用 jetty-maven-plugin 进行测试5️⃣ 使用 Cargo 实现自动…

k8s 对外服务之 Ingress( LB + ingress)

Ingress 理论 Ingress 简介 service的作用体现在两个方面&#xff0c;对集群内部&#xff0c;它不断跟踪pod的变化&#xff0c;更新endpoint中对应pod的对象&#xff0c;提供了ip不断变化的pod的服务发现机制&#xff1b;对集群外部&#xff0c;他类似负载均衡器&#xff0c;可…

Bean生命周期

在上文中&#xff0c;我们了解了Spring中简单的获取Bean对象&#xff08;对象装配&#xff09;和Bean作用域&#xff0c;那么本文主要来带领大家走进Bean的生命周期&#xff01; 所谓的生命周期指的是一个对象从诞生到销毁的整个生命过程&#xff0c;我们把这个过程叫做一个生…