【发布时间】:2019-05-19 19:31:02
【问题描述】:
我在 elixir 应用程序中有一个 ets 设置表。我需要清理其 updated_at 字段超过 10 秒的记录。有没有一种方法可以设置到期时间或手动执行而不遍历所有记录?我根据大于给定时间的时间戳匹配记录。
示例记录:
key: key_1
record: %{id: key_1, updated_at: ~N[2018-12-19 10:08:47.803075]}
到目前为止我有这个代码
def clean_stale(previous_key) do
if previous_key == :"$end_of_table" do
:ok
else
device = get(previous_key)
next_key = :ets.next(__MODULE__, previous_key)
if NaiveDateTime.diff(NaiveDateTime.utc_now, device.last_recorded_at) > 10 do
remove(device.id)
end
clean_stale(next_key)
end
end
【问题讨论】:
-
你试过查看advanced lookup吗?即使用
:ets.fun2ms/1派生一个可以为您进行比较的函数? -
谢谢@matov。我想我得到了完整的答案。是的,我有。但由于我是新手并没有从中得到太多
标签: erlang elixir data-cleaning ets cache-expiration