首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >trySet方法在重定向桶中的应用

trySet方法在重定向桶中的应用
EN

Stack Overflow用户
提问于 2018-07-11 02:56:22
回答 1查看 1.9K关注 0票数 2

我现在正在学习Redisson,我有一个例子如下:

代码语言:javascript
复制
public class TestRedisson {
    public static void main(String[] args) {

        Config config = new Config();
        config.useSingleServer().setAddress("//localhost:6379");

        RedissonClient redisson = Redisson.create(config);    
        RBucket<String> bucket = redisson.getBucket("test");
        bucket.set("123");

        boolean isUpdated = bucket.compareAndSet("123", "4934");    
        System.out.println("isUpdated:" + isUpdated);    
        System.out.println(bucket.get());

        String prevObject = bucket.getAndSet("321");    
        System.out.println("prevObject:" + prevObject);    
        System.out.println(bucket.get());

        boolean isSet = bucket.trySet("901");    
        System.out.println("isSet:" + isSet);    
        System.out.println(bucket.get());

        long objectSize = bucket.size();    
        System.out.println(objectSize);         
        redisson.shutdown();
    }
}

结果是:

代码语言:javascript
复制
isUpdated:true
4934
prevObject:4934
321
isSet:false
321
5

我对trySet方法的用法感到困惑,为什么在这个例子中失败,我在Redisson文档中找不到这个方法的任何解释,另一个问题是为什么objectSize5?由于桶的值现在是321,所以我认为objectSize应该是3

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-17 19:10:09

我自己也在调查这个。

从文件中看,它说:

尝试保存由Redis键映射的对象。如果其中至少有一个已经存在,那么不要设置任何一个。

因此,如果存储桶已经有一个对象,trySet将失败并返回false。如果桶是空的,trySet将成功并设置值。

https://static.javadoc.io/org.redisson/redisson/3.4.1/org/redisson/api/RBuckets.html#trySet-java.util.Map-

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51276593

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档