如何使用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/)仿真器/波束)。 –