Redisson RRingBuffer容量不能在同一密钥下动态更改

问题描述

目前,我正在开发要使用Redis存储一些数据的软件。 具体来说,我想在最初设置容量的地方使用RRingBuffer,它可以在运行时更改。我的想法是创建一个新的RB,并将来自oldRB的数据移至newRB 例如,也许这是错误的:

    // has some data that is created earlier with a capacity of 4
    final RRingBuffer<String> oldRB = cache.get(SOME_KEY);
    
    log.info(oldRB);

    // new ring buffer with  
    final RRingBuffer<String> newRB = redisson.getRingBuffer(A_NEW_RING_BUFFER);
    newRB.trySetCapacity(3);

    add the data from oldRB to newRB...

    cache.put(SOME_KEY,newRB)
    
    log.info(newRB)
    -------------------------------------------
    CONSOLE:
    info: ["one","two","three","four","five"]
    info: ["three","five"]

这最初是可行的,但似乎Redis会使用初始容量缓存此RB,并且无法更改它。

解决方法

Redisson 3.13.5中添加了

RRingBuffer.setCapacity()方法。因此,您可以更改容量而无需复制缓冲区状态。