代码之家  ›  专栏  ›  技术社区  ›  gesanri

在redisson rbucket中tryset方法的用法是什么

  •  1
  • gesanri  · 技术社区  · 7 年前

    我正在学习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文档中找不到此方法的任何解释,另一个问题是为什么 objectSize 5 是吗?因为bucket的值是 321 现在,我想 对象大小 应该是 3 是的。

    1 回复  |  直到 7 年前
        1
  •  1
  •   andytung    7 年前

    我自己也在调查。

    从文件上看,它说:

    尝试保存由redis key映射的对象。如果其中至少有一个是 既然已经存在,就不要设置它们。

    因此,如果bucket已经有一个对象,tryset将失败并返回false。如果bucket为空,tryset将成功并设置该值。

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