redis redisson 桶示例
作用:桶存储单个对象,提供了原子替换功能,可在高并发场景下进行更新操作
******************
相关接口
RBucket
public interface RBucket<V> extends RExpirable, RBucketAsync<V> {
void set(V var1); //设置桶存储的对象
void set(V var1, long var2, TimeUnit var4); //设置桶存储的对象,设置操作的超时时间var2
boolean trySet(V var1); //尝试设置桶的新值
boolean trySet(V var1, long var2, TimeUnit var4); //尝试设置桶的新值,设置超时时间var2
boolean compareAndSet(V var1, V var2); //原子替换桶的新值为var2
long size(); //桶存储对象的大小
V get(); //返回桶存储的对象
V getAndDelete(); //返回并删除桶存储的对象
V getAndSet(V var1); //返回桶的旧值,设置新值
V getAndSet(V var1, long var2, TimeUnit var4); //返回桶的旧值,设置新值,设置操作的超时时间var2
}
******************
示例
public class MyTest10 {
public static void main(String[] args){
Config config=new Config();
().setAddress("redis://***:6379").setPassword("123456");
RedissonClient client= (config);
RCountDownLatch countDownLatch=("countDownLatch");
(20);
RBucket<String> bucket=("bucket8");
("瓜田李下 "+1);
String oldValue=();
ExecutorService executorService= (10);
for (int i=0;i<20;i++){
(()->{
if ((oldValue,"瓜田李下 "+2)){
("线程"+().getId()+"更新了bucket的值");
}
();
});
}
try {
();
}catch (Exception e){
();
}
("更新后的桶对象为:"+());
}
}
*************
控制台输出
线程49更新了bucket的值
更新后的桶对象为:瓜田李下 2
说明:有20个线程更新桶对象,只有一个执行了更新操作