我有一个使用multi
后端存储的Riak服务器,配置如下:
...
storage_backend = multi
multi_backend.bitcask_mult.storage_backend = bitcask
multi_backend.bitcask_mult.bitcask.expiry = 10s
...
我已检查过以下一系列步骤是否正常。
key-1
添加新值。key-1
获取值,返回预期值。key-1
获取值。由于密钥已过期,因此不返回任何内容。到目前为止一切顺利。
但是,如果现在我再次使用相同的键放置值...
key-1
key-1
获取值,返回两个兄弟姐妹!我已经在第4步和第5步之间等了好几个小时(以防必须刷新过期或类似的事情),没有运气。
我可以解决处理兄弟姐妹的这种情况,这对于我工作的其他一些桶来说无论如何都要做,但我并不期望必须处理过期的兄弟姐妹"!
我已阅读过有关automatic expiration and Riak Search的内容,但我认为情况并非如此。
我做错了吗?我错过了什么吗?
感谢。
答案 0 :(得分:2)
无效,到期工作正在运作,但您遇到了我将调用的问题"到期<>删除&#34 ;.当一个对象在Bitcask中到期时,一个墓碑由Bitcask创建,后端将not_found
返回给该对象的任何请求但该对象不被删除。该对象被删除"当Bitcask数据文件中最旧的对象到期并且整个文件过期时。此时,将创建一个新文件。
在Bitcask中创建新文件之前,即使Bitcask返回not_found
,该对象仍然存在。当您写入"已删除"密钥Bitcask最后修改的时间正在更新基本上复活它。
要测试这个理论,您实际上可以停止Riak并重新启动它。重新启动Riak将导致Bitcask创建一个新的数据文件,并使您无法获得兄弟姐妹。
长话短说,你仍然需要在这种情况下与兄弟姐妹打交道。