首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Redis和Memcache,还是只有Redis?

问Redis和Memcache,还是只有Redis?
EN

Stack Overflow用户
提问于 2010-11-16 04:40:42
回答 6查看 24.7K关注 0票数 88

我正在使用memcached通过简单的Rails.cache接口在我的Rails3应用程序中进行一些缓存,现在我想使用redis和resque进行一些后台作业处理。

我认为它们的不同之处足以保证两者都使用。然而,在heroku上,使用memcached和redis是分开收费的。两者都使用有意义吗?或者我应该迁移到只使用redis?

我喜欢使用memcached进行缓存,因为最近最少使用的键会自动推出缓存,并且我不需要缓存数据持久化。Redis对我来说大多是新的,但我知道它在默认情况下是持久的,密钥不会自动从缓存中过期。

编辑:只是想让我的问题更清楚。我知道只使用Redis而不是两者都使用是可行的。我想我只是想知道这样做有没有什么特别的缺点?考虑到实现和基础设施,我有什么理由不应该只使用Redis吗?(即,memcached对于简单的缓存是否更快?)无论哪种方式,我都没有找到任何确定的东西。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-11-16 08:31:39

假设从memcached迁移到redis进行缓存已经足够简单,为了简单起见,我选择使用redis。

在redis中,持久化是可选的,所以如果你愿意的话,你可以像memcached一样使用它。您甚至可能会发现,使缓存持久化对于避免在重新启动后发生大量缓存未命中非常有用。Expiry也是可用的-算法与memcached略有不同,但对于大多数用途来说还不够重要-详情请参阅http://redis.io/commands/expire。

票数 50
EN

Stack Overflow用户

发布于 2011-10-05 03:10:28

我是redis-store的作者,不需要直接使用Redis命令,只需像这样使用:expires_in选项:

ActionController::Base.cache_store = :redis_store, :expires_in => 5.minutes

使用Redis的好处是速度快,而使用我的gem,你已经有了Rack::Cache、Rails.cache或I18n的商店。

票数 45
EN

Stack Overflow用户

发布于 2012-09-21 16:40:03

我见过一些同时使用Memcached和Redis的大型rails站点。Memcached用于在内存中保持热的短暂的东西,但可以在需要时丢失/重新生成,而Redis用于持久存储。两者都用于减轻读/写繁重操作的主DB的负载。

更多详细信息:

LRU Memcached :用于页面/片段/响应缓存的,在Memcached上达到内存限制是可以的,因为它会使旧的东西过期(最近最少使用),并经常使访问的键在内存中保持热。重要的是,如果需要,Memcached中的任何内容都可以从DB重新创建(这不是您唯一的副本)。但是你可以继续将数据转储到内存中,Memcached会找出使用频率最高的数据,并将这些数据保存在内存中。您不必担心从Memcached中删除内容。

redis:您可以使用它来存储您不想丢失的数据,而且它足够小,可以放入内存中。这通常包括resque/sidekiq作业、速率限制计数器、拆分测试结果,或者任何您不想丢失/重新创建的东西。您不希望超过此处的内存限制,因此您必须对存储和稍后清理的内容更加小心。

Redis一旦超过其内存限制,就会开始出现性能问题(如果我错了,请纠正我)。可以通过配置Redis来解决这个问题,让它像Memcached和LRU expire一样工作,这样它就永远不会达到内存限制。但你不会想要用你保存在Redis中的所有东西这样做,比如resque工作。因此,人们通常不会保留默认设置,而是将Rails.cache设置为使用Memcached (使用dalli gem)。然后他们保留一个单独的$redis = ...执行redis操作的全局变量。

代码语言:javascript
复制
# 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,另一个用于持久存储?我还没有见过它被使用过,但我猜它是可行的。

票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4188620

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档