1

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

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

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

4

2 回答 2

1

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

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

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

于 2013-05-02T11:31:44.920 回答
0

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

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

于 2013-01-11T16:17:17.080 回答