小编Rad*_*ive的帖子

从 ets 表中删除日期戳早于 10 秒的所有记录

ets在一个长生不老药应用程序中有一个设置表。我需要清理其 updated_at 字段超过 10 秒的记录。有没有一种方法可以设置到期时间或手动完成而不遍历所有记录?我根据大于给定时间的时间戳匹配记录。

示例记录:

key: key_1
record: %{id: key_1, updated_at: ~N[2018-12-19 10:08:47.803075]}
Run Code Online (Sandbox Code Playgroud)

到目前为止我有这个代码

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
Run Code Online (Sandbox Code Playgroud)

erlang elixir ets cache-expiration data-cleaning

0
推荐指数
1
解决办法
516
查看次数

标签 统计

cache-expiration ×1

data-cleaning ×1

elixir ×1

erlang ×1

ets ×1