首页 > 解决方案 > Riak 和内存后端:处理过期和修剪

问题描述

我想知道最好的策略是管理存储在内存 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 类型的自定义模式?

标签: riakriak-search

解决方案


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


推荐阅读