【问题标题】:what's the usage for trySet method in redisson rbucketredisson rbucket中trySet方法的用途是什么
【发布时间】:2018-07-11 02:56:22
【问题描述】:

我现在正在学习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是@ 987654325@?由于bucket的值现在是321,我认为objectSize应该是3

【问题讨论】:

    标签: redis redisson


    【解决方案1】:

    我自己也在研究这个。

    它看起来像它说的文档:

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

    所以如果桶里已经有一个对象,trySet 会失败并返回 false。如果bucket为空,trySet会成功并设置值。

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

    【讨论】:

    • 好吧,你是对的,为什么桶大小是 5,而不是 3?
    • bucket.size() 返回对象的大小(以字节为单位),而不是字符串的长度。这只是意味着除了 3 个数字,每个数字占 1 个字节外,该对象还有 2 个其他字节的数据包含其他信息。
    猜你喜欢
    • 2018-04-24
    • 2011-02-03
    • 2011-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-31
    • 2019-03-03
    相关资源
    最近更新 更多