redisson rbucket中trySet方法的用途是什么

时间:2018-07-11 02:56:23

标签: redis redisson

我现在正在学习Redisson,下面是一个示例:

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();
    }
}

结果是:

isUpdated:true
4934
prevObject:4934
321
isSet:false
321
5

我对trySet方法的用法感到困惑,为什么在此示例中失败,我在Redisson API文档中找不到该方法的任何解释,另一个问题是为什么{{1 }}是objectSize吗?由于bucket的值现在为5,因此我认为321应该为objectSize

1 个答案:

答案 0 :(得分:1)

我自己也在研究这个问题。

从说明文件中可以看出:

  

尝试保存通过Redis键映射的对象。如果其中至少一个是   已经存在,则不要设置它们。

因此,如果存储桶中已有对象,则trySet将失败并返回false。如果存储桶为空,则trySet将成功并设置值。

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