问题描述
目前,我正在开发要使用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()
方法。因此,您可以更改容量而无需复制缓冲区状态。