如何使用Erlang实现LRU缓存?Erlang LRU缓存
顶部出演Github的项目是fogfish/cache,但分段表是不是很适合我的数据。
barrel-db/erlang-lru正在使用列表。经过测试,如果数据太多,速度会很慢。
我猜问题就在这里。
move_front(List, Key) -> [Key | lists:delete(Key, List)].
随着的Java,更好的实施方案是使用的HashMap和链表like this
我试图做一个链表,然后意识到LinkedList的是不是好主意对于Erlang,like this thread。
问题是如何用Erlang做一个LRU缓存?
我认为Erlang是做低级别缓存和过高的水平目前,二郎在核心一些类似的功能(像ETS http://erlang.org/doc/man/ets.html),那么,在使用外部项目之前,您是否测试了其中一些功能? –
@MathieuK。感谢您的意见。是的,我试过了。关键问题是LRU。我尝试使用表来保存access_time,但是对于每次读取/更新,我需要更新(删除然后插入)表。我想知道这是否可以用更好的方法完成? – user3644708
我没有你的问题的一个答案。如果你想在Erlang中实现高性能的LRU缓存,我想最好的方法之一是使用与[ports](http://erlang.org/doc/reference_manual/ports.html)或[NIF]互连的外部代码( http://erlang.org/doc/tutorial/nif.html)。 C编程不是我最喜欢的领域,但是,如果你想要一些为Erlang实现C代码的例子,你可以检查[beam source code](https://github.com/erlang/otp/tree/maint/erts/)仿真器/波束)。 –