【问题标题】:Riak & memory backend: handling expiration and pruningRiak 和内存后端:处理过期和修剪
【发布时间】:2018-11-17 16:01:36
【问题描述】:

我想知道最好的策略是管理存储在内存 Riak 存储桶类型中的会话相关数据的过期。

这个后端似乎支持 ttl(http://docs.basho.com/riak/kv/2.2.3/setup/planning/backend/memory/#ttlhttp://docs.basho.com/riak/kv/2.2.3/configuring/backend/#memory-backend),但是第二个链接的文档指出:

“一旦该对象的时间到了,它将在下一次读取时被删除 它的钥匙。” 如果对象永远不会被再次读取怎么办?它会留在内存中吗?但是我猜它最终会在达到memory_backend.max_memory_per_vnode 限制时被销毁。

存储过期时间戳是否是另一个相关选项?在这种情况下,修剪将由定期搜索“旧”时间戳的进程完成:

:riakc_pb_socket.search(pid, "expirable_token", "exp_counter:[* TO 1542468475]")
# then we delete them

我已经通过将时间戳存储在计数器中进行了测试,因为无法对索引为字符串的寄存器进行范围请求:

iex(34)> :riakc_counter.increment(System.system_time(:second), :riakc_counter.new())
{:counter, 0, 1542468373}

但是,我不确定计数器是为存储整数而设计的。在 Riak 数据类型中存储整数的最佳实践是什么?声明了正确 int 类型的自定义架构?

【问题讨论】:

    标签: riak riak-search


    【解决方案1】:

    我建议使用不同的后端。 Bitcask 过期非常有效,可以非常精确地配置。 leveldb 过期效果很好。

    【讨论】:

    • 感谢您的评论。但是,我想将 Riak 用作缓存(à-la Redis),因为我不关心数据丢失,不需要在磁盘上持久化数据并且我想避免其他依赖(例如:Redis )。你有什么建议?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-11
    • 1970-01-01
    • 1970-01-01
    • 2015-01-02
    相关资源
    最近更新 更多