ruby-on-rails – Rails中的应用程序上下文

ruby-on-rails – Rails中的应用程序上下文,第1张

概述Rails附带了一个方便的会话哈希,我们可以在其中填充内容.但是,我会喜欢ASP的应用程序上下文,它不是仅在一个会话中共享数据,而是与同一应用程序中的所有会话共享它.我正在编写一个简单的仪表板应用程序,并希望每5分钟提取数据,而不是每个会话每5分钟提取一次. 当然,我可以将缓存更新时间存储在数据库中,但到目前为止还不需要为此应用程序设置数据库,并且如果可能的话,我希望避免这种依赖. 那么,有没有办 Rails附带了一个方便的会话哈希,我们可以在其中填充内容.但是,我会喜欢ASP的应用程序上下文,它不是仅在一个会话中共享数据,而是与同一应用程序中的所有会话共享它.我正在编写一个简单的仪表板应用程序,并希望每5分钟提取数据,而不是每个会话每5分钟提取一次.

当然,我可以将缓存更新时间存储在数据库中,但到目前为止还不需要为此应用程序设置数据库,并且如果可能的话,我希望避免这种依赖.

那么,有没有办法获得(或模拟)这种东西?如果在没有数据库的情况下没有办法做到这一点,Rails附带的任何“假”数据库引擎是否都在内存中运行,但是在重新启动之间不会产生持久数据?

解决方法 正确答案:memcached.如今,快速,干净,支持多个进程,与Rails非常干净地集成.设置甚至不是很糟糕,但继续运行还有一件事.

90%答案:可能有多个Rails进程在运行 – 例如,每个Mongrel就有一个.根据您的缓存需求的具体情况,很可能每个Mongrel有一个缓存并不是世界上最糟糕的事情.例如,假设您正在缓存长时间运行的查询的结果

>每8小时获取一次新数据
>每页加载使用,每天20,000次
>需要在4个进程中访问(Mongrels)

然后你可以用大约一行代码将20,000个请求减少到12个

@@arbitrary_name ||= Model.find_by_stupIDly_long_query(param)

双重标记,您可能不熟悉的Ruby符号,是一个全局变量.当且仅当变量当前为nil或以其他方式计算为false时,|| =是执行赋值的常用Ruby习惯用法.它会一直保持良好状态,直到你明确地清空它或者直到进程停止为止,无论出于何种原因 – 服务器重启,明确杀死,你有什么.

在你从一天的20k计算到大约15秒内的12次之后(好的,两分钟 – 你需要将它包装在一个简单的if块中,将缓存更新时间存储在不同的全局中),你可能会发现那里没有必要花费额外的工程资产将其降低到每天4天.

我实际上在我的一个生产站点中使用它,用于缓存一些昂贵的查询,这些查询在过程的生命周期中只需要进行一次评估(即它们仅在部署时更改 – 我想我可以预先计算结果并写入他们到磁盘或数据库,但为什么这样做时,sql可以为我做的工作).

你没有得到任何魔术到期语法,可靠性相当渺茫,并且不能跨进程共享 – 但它在一行代码中需要90%.

总结

以上是内存溢出为你收集整理的ruby-on-rails – Rails中的应用程序上下文全部内容,希望文章能够帮你解决ruby-on-rails – Rails中的应用程序上下文所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1257581.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存