【问题标题】:Optimal expire_in value for cache in RedisRedis 中缓存的最佳 expire_in 值
【发布时间】:2013-01-11 14:58:35
【问题描述】:

我想在我的 Rails 应用程序中使用 gem "redis-store" 作为缓存存储。与 memcached 不同,redis 不会清理未使用的键,但我可以在每个键上使用 EXPIRE 命令(通过 :expire_in 选项)来限制每个键的生命周期。

然后我想使用我的模型的cache_key(包括idupdated_at)作为redis键的一部分,用于缓存。所以当模型更新时,新的缓存键会被创建,而旧的将永远不会被使用。

那么问题来了,选择哪个过期时间?如果设置得太小,它会消除缓存的好处,如果太长 - 它会用未使用的数据填充 redis,这会(可能)降低性能。中庸之道在哪里?

【问题讨论】:

  • 缓存过期是编程中仅有的两件难事之一 :)

标签: ruby-on-rails caching redis


【解决方案1】:

我建议使用 Redis 的 LRU 过期策略,让 Redis 自己过期最近最少使用的密钥。这样,您就不必担心自己的密钥过期了。

按照您的建议使用模型的 cache_key 确实会在模型更改时生成一个新密钥。您的视图将不再使用该模型的“旧”键,Redis 最终会使它们过期。

有关如何将 Redis 配置为 LRU 存储的信息,请参阅 http://redis.io/topics/config

【讨论】:

  • 看起来很棒!它是一个新的 redis 功能还是我错过了过去的一些东西?
【解决方案2】:

这肯定是依赖于应用程序的吗?如果它是一个非常昂贵的页面,您希望尽可能少地重新计算它,但如果它快速变化,您就别无选择。

我会亲自尝试。选择一些数字,看看它们如何影响性能。一开始就犯错(信任您的数据库,在本例中为 Redis),然后在遇到问题时对其进行调整。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-06
    • 2017-01-24
    • 2019-09-08
    • 1970-01-01
    • 1970-01-01
    • 2010-10-31
    • 2016-03-15
    相关资源
    最近更新 更多