【问题标题】:How to create a Global Variable in elixir Module如何在 elixir 模块中创建全局变量
【发布时间】:2017-03-20 20:40:01
【问题描述】:

我在 elixir 中有以下代码:

def get_trackerid(imei) do
  client = get_new_client()
  {:ok, result} = :cqerl.run_query(client, "SELECT * FROM trackers_by_imei where imei = \'#{imei}\';")
  row = :cqerl.all_rows(result)
end

现在,很多函数都在调用 get_trackerid 函数,每次调用该函数时,都会调用数据库。

有没有办法在 elixir 中编写一个函数,以便将结果存储在局部变量中。因此,当下次请求同一个imei的trackerid时,我可以从本地变量本身获取数据。

我认为elixir中没有全局变量的概念,所以这不是一个选项,对吧?

【问题讨论】:

    标签: elixir


    【解决方案1】:

    您有几个选项可以在 Elixir 中保存状态。

    如果此方法是运行GenServer 的模块的一部分,那么您可以使用state 参数来缓存值。

    您还可以使用ets table 来缓存这些值。这适用于 GenServer 内部和外部。

    【讨论】:

    【解决方案2】:

    您要问的是“memoization”。我提到如果你关心谷歌,看看你是否能找到更多关于这个主题的信息。

    这是一篇很棒的博客文章,讨论了 Elixir 中的记忆技术:https://web.archive.org/web/20161116091132/http://ineverfinishanyth.in/2014/01/20/memoization-in-elixir

    TL;DR

    构造一个缓存并在您尝试进行计算时检查缓存以查看答案是否已经存在。在该博客文章中,他构建了一个键值对存储作为缓存,但显然您应该构建什么样的缓存将高度依赖于您正在缓存的数据。

    【讨论】:

    • 提供的链接已损坏。
    • @tunedconsulting 我已将链接更改为指向网页的 google 缓存版本。
    • 我已将链接修改为指向该链接的 Internet 存档副本。 _Teach_a_man_to_fish_moment:将来,与其抱怨链接坏了,不如自己尝试在互联网档案中找到链接并更新条目。只是一个建议。
    猜你喜欢
    • 1970-01-01
    • 2014-11-29
    • 2016-02-10
    • 1970-01-01
    • 2011-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多