我想知道最好的策略是管理存储在内存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类型的自定义架构已声明?
答案 0 :(得分:0)
我建议使用其他后端。位桶过期非常有效,可以非常精确地配置。 leveldb有效期足够好。