当然,我可以将缓存更新时间存储在数据库中,但到目前为止还不需要为此应用程序设置数据库,并且如果可能的话,我希望避免这种依赖.
那么,有没有办法获得(或模拟)这种东西?如果在没有数据库的情况下没有办法做到这一点,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中的应用程序上下文所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)