【问题标题】:Redis and Rails counter cache columnRedis 和 Rails 计数器缓存列
【发布时间】:2013-04-26 16:20:05
【问题描述】:

我目前在 Rails 中使用计数器缓存列,但我开始对关联(评级)执行更复杂的查询。出于性能原因,我将数据移动到 Redis。

我的问题是,在 Redis 中存储所有数据时,计数器缓存列是否仍然相关,或者 Redis 会使这种方法过时(并且只对 Redis 存储执行计数)?

我想这归结为:

post.ratings_count # cache_column, table in sql database
$redis.scard("post:123:ratings")

当然,post.ratings_count 只会获取一个属性,而不是执行查询(因为帖子已经被加载)。我唯一担心的是$redis.scard 会在 Redis 存储上执行某种“查询”。可以忽略不计吗?

【问题讨论】:

    标签: ruby-on-rails redis


    【解决方案1】:

    您不必担心 SCARD 命令的性能。

    redis SCARD 命令的时间复杂度为 O(1),这意味着 redis 几乎不需要任何成本。

    如果你有能力将整个集合存储在 redis 中,那么缓存计数就不再有用了。

    不幸的是,您并不总是有足够的空间将所有内容存储在 redis 中(redis 存储必须适合您的 ram),因此在这种情况下,缓存计数列仍然有意义。

    【讨论】:

    • 感谢您的澄清。
    • @Tommaso Barbugi 我是 Redis 新手。如果您说我们建议保留缓存计数,这意味着我们仍然每次都更新该列,那么使用 redis 有什么好处,因为当我们加载帖子时它也会包含一个计数字段?
    猜你喜欢
    • 2017-10-26
    • 1970-01-01
    • 1970-01-01
    • 2019-01-09
    • 2015-03-10
    • 1970-01-01
    • 2016-08-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多