Redis和Memcache还是Redis?
我通过简单的Rails.cache
接口在我的Rails 3应用程序中使用memcached进行caching,现在我想用redis和resque做一些后台作业处理。
我认为他们有足够的差别来保证使用两者。 在heroku上,使用memcached和redis都有单独的费用。 使用两者还是应该迁移到仅使用redis?
我喜欢使用memcached进行caching,因为最近最less使用的密钥会自动从caching中移出,而且我不需要caching数据来保存。 Redis对我来说大多是新手,但是我明白它默认是持久的,并且密钥不会自动从caching中过期。
编辑:只是想更清楚我的问题。 我知道只使用Redis而不是两者都是可行的。 我想我只是想知道这样做有没有什么特别的缺点? 考虑到实施和基础设施,我有什么理由不应该只使用Redis? (即,简单的cachingmemcached更快?)我还没有发现任何明确的任何方式。
假设从memcached迁移到redis以进行caching已经足够简单了,那么我只会使用redis来保持简单。
在redis中,持久化是可选的,所以你可以像memcached一样使用它,如果这是你想要的。 您甚至可能会发现,使您的caching保持持久性是有用的,以避免重新启动后大量的caching未命中。 有效期也是可用的 – algorithm与memcached有点不同,但对于大多数目的来说不够重要 – 请参阅http://redis.io/commands/expire了解详细信息。;
我是redis-store的作者,不需要直接使用Redis命令,只需使用:expires_in
选项就可以了:
ActionController::Base.cache_store = :redis_store, :expires_in => 5.minutes
使用Redis的好处在于坚固性,而用我的gem,你已经有了Rack::Cache
, Rails.cache
或I18n
商店。
我见过几个使用memcached和redis的大型rails站点。 memcached用于emphemeral的东西是很好的保持热在内存中,但可以丢失/重新生成,如果需要的话,和redis的持久性存储。 两者都用于从主db读取/写入繁重的操作。
更多细节:
memcached:用于页面/片段/响应caching,可以达到memcached的内存限制,因为它会使LRU(最近最less使用)过期旧的东西,并将频繁访问的键保持在内存中。 如果需要,memcached中的任何内容都可以从数据库重新创build(这不是唯一的副本)是非常重要的。 但是你可以不断地把东西存入其中,而memcached会计算出最经常使用的东西,并把这些东西留在内存中。 你不必担心从memcached中移除东西。
redis:你使用这个数据是你不想丢失的,而且足够小以适应内存。 这通常包括resque / sidekiq作业,限速计数器,分割testing结果,或任何你不想丢失/重build的东西。 你不想在这里超过内存限制,所以你必须稍微注意一下你以后存储和清理的内容。
Redis一旦超过内存限制就会出现性能问题(如果我错了,请纠正我)。 可以通过configurationredis像memcached和LRU过期的东西来解决这个问题,所以它永远达不到它的内存限制。 但是,你不想在redis中保存所有的东西,比如重置工作。 所以人们经常保持默认的Rails.cache设置为使用memcached(使用dalli
gem)。 然后他们保持一个单独的$ redis = …全局variables来执行redis操作。
# in config/application.rb config.cache_store = :dalli_store # memcached # in config/initializers/redis.rb $redis = $redis = Redis.connect(url: ENV['REDIS_URL'])
可能有一个简单的方法可以在redis中完成这一切 – 可能通过两个单独的redis实例,一个具有LRU硬内存限制,类似于memcache,另一个用于持久性存储? 我还没有看到这个使用,但我猜这是可行的。
我会考虑检查我在这个问题上的答案:
Rails和caching,在memcache和redis之间切换是否容易?
从本质上讲,通过我的经验,我会主张保持它们的独立性:用于caching的memcached和用于数据结构的redis以及更持久的存储
我询问了Redis实验室 (他们提供Memcached Cloud和Redis Cloud附加产品)的团队,他们将推荐哪些产品用于Railscaching。 他们表示,总的来说,他们会推荐Redis Cloud,Memcached Cloud主要是为了遗留目的而提供的,并指出他们的Memcached Cloud服务实际上是build立在Redis Cloud之上的。
我不知道你使用的是什么,但实际上使用它们可能会给你一个性能上的优势:Memcached在Redis上运行的多核性能要好得多,所以用Memcachedcaching最重要的数据,并保留其余的Redis利用其作为数据库的能力可以提高性能。