4

elang ets テーブルを単純なキャッシュとして使用します。テーブルをスキャンして期限切れの要素を削除するプロセスを使用したい (複数)。

ets:foldl を使用

expire_table_example() ->
Tab = ets:new(ets_tab, [named_table, set]),
ets:insert(Tab, [{a, 1}, {b, 2}, {c, 3}, {d, 4}, {e, 5},{f,7}]),
Tab1 = ets:foldl(fun({Key, Val}, Acc) ->
if
   (Val > 3) -> [{Key, Val} | Acc];
   true -> Acc
 end
end, Tab, Tab),
io:format("end ~p ~n", [Tab1]).

私は得た

[{f,7},{e,5},{d,4}|ets_tab] %% the ets_tab is NOT expected.

これを修正するにはどうすればよいですか?

他のAPIはこれをよりうまく行うでしょうか?

4

3 に答える 3

0

膨大な数のオブジェクトを定期的に削除すると、望ましくない遅延スパイクが発生する場合があります。個別の ets テーブルとしてキャッシュ セグメントを持ち、ets 全体を削除して古いオブジェクトを削除する興味深いプロジェクトがあります。

https://github.com/fogfish/cache

于 2015-12-23T14:08:00.670 に答える