riak - Riak 和内存后端:处理过期和修剪
问题描述
我想知道最好的策略是管理存储在内存 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 类型的自定义模式?
解决方案
我建议使用不同的后端。Bitcask 过期非常有效,可以非常精确地配置。leveldb 过期效果很好。
推荐阅读
- java - 如何将日期格式:2020-09-28T11:47:37.217 转换为 11:47?
- android - Firebase - 在 Graph 8.0 更新后从具有 Facebook 提供商的身份验证获取个人资料照片网址
- ios - 将缓冲区附加到 AVAssetWriterInputPixelBufferAdaptor *not* 按时间顺序?
- reactjs - react js中Formik面临的验证和isValid问题
- kotlin - 从视图中监听协程不能从视图初始化中完成
- python - 如何加快 conda 的包安装过程?
- javascript - How to replace a d3js nest function with group and rollup
- c# - API reuring image 无法正确显示图像
- pagespeed-insights - 是否可以将 cookie 设置为 Page Speed Insights 测试?
- javascript - 如何在 3rd 方 iframe 中的 3rd 方表单上预填充表单字段?(固化)