我想知道最好的策略是管理存储在内存 Riak 存储桶类型中的会话相关数据的过期。
看来这个后端支持ttl(http://docs.basho.com/riak/kv/2.2.3/setup/planning/backend/memory/#ttl和http://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 类型的自定义模式?