gpt4 book ai didi

caching - Erlang LRU 缓存

转载 作者:行者123 更新时间:2023-12-02 16:04:31 24 4
gpt4 key购买 nike

如何使用 Erlang 实现 LRU 缓存?

LRU Cache Wiki

最受关注的 Github 项目是 fogfish/cache ,但分段表不太适合我的数据。

barrel-db/erlang-lru正在使用列表。经过测试,数据量太多的话会很慢。

我猜问题出在这里。

move_front(列表, 键) ->
[关键|列表:删除(键,列表)]。

对于Java,更好的实现是使用 HashMap 链接列表 like this

我尝试做一个链表,然后意识到链表对于Erlang来说不是一个好主意like this thread .

问题是如何使用 Erlang 进行 LRU 缓存?

最佳答案

THE CACHE 的第一个实现是基于具有两个索引的 ETS。一个ets表保存TTL -> Key关系,另一个ets表保存Key -> Object关系。您可以在

处查看实现

https://github.com/fogfish/cache/commit/8cc50bffb4178ad9ad716703507c3290e1f94821

两个索引的维护效率不高,因此分段缓存优于原始实现。我不建议使用 Erlang 数据结构实现每个对象的 TTL,除非您可以在 actor 中对数据进行建模并接受开销。有一个实现可以解决这个问题。它使用每个对象的进程概念:

https://github.com/fogfish/pts

否则,您需要实现 NIF

关于caching - Erlang LRU 缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38644224/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com