heroku Redis和Memcache还是仅仅是Redis?

vnzz0bqm  于 2023-08-06  发布在  Redis
关注(0)|答案(6)|浏览(148)

我在Rails3应用程序中通过简单的Rails.cache接口使用memcached进行一些缓存,现在我想用redis和resque做一些后台作业处理。
我认为它们的不同足以保证两者都用。不过在heroku上,memcached和redis是分开收费的。两者都用有意义吗?或者我应该迁移到只使用redis?
我喜欢使用memcached进行缓存,因为最近最少使用的键会自动从该高速缓存中推出,我不需要缓存数据持久化。Redis对我来说基本上是新的,但我知道它默认是持久的,并且密钥不会自动从该高速缓存中过期。
答:我只是想更清楚地回答你的问题。我知道只使用Redis而不是两者都使用是可行的。我想我只是想知道这样做是否有任何具体的缺点?考虑到实现和基础设施,有什么理由不应该只使用Redis吗?(即,memcached对于简单缓存是否更快?)我还没有找到任何明确的方式。

woobm2wo

woobm2wo1#

假设从memcached迁移到redis的缓存已经足够简单,那么我选择redis只是为了保持简单。
在redis中,持久性是可选的,所以如果你想要的话,你可以像memcached一样使用它。您甚至可能会发现,使缓存持久化有助于避免重启后出现大量缓存未命中。过期也是可用的-算法与memcached有点不同,但对于大多数用途来说还不够重要-有关详细信息,请参阅http://redis.io/commands/expire

9rnv2umw

9rnv2umw2#

我是redis-store的作者,没有必要直接使用Redis命令,只需要像这样使用:expires_in选项:
ActionController::Base.cache_store = :redis_store, :expires_in => 5.minutes
使用Redis的优点是快速,而我的宝石,是你已经有Rack::CacheRails.cacheI18n的商店。

k3bvogb1

k3bvogb13#

我见过一些大型的Rails站点同时使用Memcached和Redis。Memcached用于短暂的东西,这些东西很好地保持在内存中,但如果需要,可以丢失/重新生成,而Redis用于持久存储。两者都用于为阅读/写繁重的操作减轻主DB的负载。
更多详情:

**Memcached:**用于页面/片段/响应缓存,在Memcached上达到内存限制是可以的,因为它会LRU(最近最少使用)使旧的东西过期,并经常在内存中保持访问的键热。重要的是,如果需要,可以从DB中重新创建Memcached中的任何内容(它不是您唯一的副本)。但是你可以不断地把东西转储到它里面,Memcached会找出哪些是最常用的,并把它们保存在内存中。您不必担心从Memcached中删除内容。
**redis:**你使用它来保存你不想丢失的数据,并且它足够小,可以放入内存。这通常包括resque/sidekiq作业、速率限制计数器、分割测试结果或任何您不希望丢失/重新创建的内容。您不希望在这里超出内存限制,因此必须更加小心地存储和稍后清理内容。

一旦超过内存限制,Redis就开始出现性能问题(如果我错了,请纠正我)。可以通过配置Redis来解决这个问题,使其像Memcached和LRU过期一样,这样它就永远不会达到内存限制。但是你不想对Redis中的所有东西都这样做,比如重新定制的工作。因此,人们通常保留默认值,Rails.cache设置为使用Memcached(使用dalli gem)。然后他们保持一个单独的$redis =...全局变量来执行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,另一个用于持久存储?我还没有看到这个使用,但我猜这将是可行的。

j91ykkif

j91ykkif4#

我想看看我对这个问题的回答:
Rails和缓存,在memcache和redis之间切换容易吗?
从本质上讲,根据我的经验,我主张将它们分开:memcached用于缓存,redis用于数据结构和更持久的存储

vh0rcniy

vh0rcniy5#

我问了Redis团队(他们提供Memcached CloudRedis Cloud插件),他们会推荐哪种产品用于Rails缓存。他们说,一般来说,他们会推荐Redis Cloud,Memcached Cloud主要用于传统目的,并指出他们的Memcached Cloud服务实际上是建立在Redis Cloud之上的。

ac1kyiln

ac1kyiln6#

我不知道你在用它们做什么,但实际上两者都用可能会给你带来性能优势:与Redis相比,Memcached在多核运行时的性能要好得多,因此使用Memcached缓存最重要的数据,并将其余数据保存在Redis中,利用其数据库功能,可以提高性能。

相关问题