2012-01-13 46 views
0

我在应用程序中使用memcached(gem memcache-client),但我想同时使用内存缓存存储。目前,我有我的application.rb如下:如何同时使用Memcache和Ruby On Rails默认的内存存储?

 
config.cache_store = :mem_cache_store, {:namespace => "my_namespace_#{Rails.env}"} 

,这正常工作与命令,如Rails.cache.write(...)

我如何使用ActiveSupport::Cache::MemoryStore我的一些车型,并在同一时间使用memcached的其他我到现在为止的理由?

我知道ActiveSupport::Cache.lookup_store会还给我一个新的MemoryStore对象。但是,从这一点我不知道如何继续?例如,我在哪里放这个命令?我在哪里存储结果对象?以后如何从模型代码中访问此对象?或者我应该采用完全不同的方式?

在此先感谢您的帮助。

+1

没有真正回答你的问题,但只是好奇,为什么你在你的应用程序需要两个店? – leonardoborges 2012-01-13 11:28:19

+0

我想我可能会为我想要立即访问的某些型号获得更好的性能。而不是必须进行进程间通信(当memcached在同一台服务器上)或intermachine通信(当memcached在不同的服务器上时),我将从进程内存访问我的对象。 – 2012-01-13 11:55:47

+1

但是,我明白了,那是因为你只有一个进程正在运行。如果你有多个进程,内存存储将不会被共享,所以如果你的用户点击一个没有加载对象到内存的进程,它会再次打到DB,每个进程有一次。这并没有真正扩展,总体来说你最好使用memcached。除非你正在运行一个流程应用程序,而且这个应用程序不会很快改变。 – leonardoborges 2012-01-13 12:57:12

回答

2

Rails.cache仅仅是为了方便您创建了一个缓存存储。没有什么能阻止你做一些像

::MEMORY_STORE = ActiveSupport::Cache::MemoryStore.new 

,然后当你想使用存储,而不是Rails.cache你会做

MEMORY_STORE.fetch('some_key') {} 

虽然,作为@leonardoborges评论,我不知道你为什么想做到这一点

+0

这个答案几乎是正确的。我已经给你发送了一个小的编辑/修正来使它正常工作。等待你进行纠正,以便我可以接受这个答案。 – 2012-01-16 19:13:14

+0

我看不到编辑请求,但我确实发现了一个错字 – 2012-01-16 22:13:38

+0

是的。那是我的改正。 (我不知道编辑通知如何与SOW一起工作)。 – 2012-01-17 08:12:08