首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Redis对象-从DB配置文件视图计数器获取所有对象

Redis对象-从DB配置文件视图计数器获取所有对象
EN

Stack Overflow用户
提问于 2014-03-06 04:35:20
回答 1查看 888关注 0票数 1

我目前正在开发一个成员网站,其中包括一个视图计数器。过去的经验表明,在SQL中使用视图计数器成本很高。事实上,我没有看到柜台,但今天这不是一个选择。

项目使用

  • Rails 4.0.2
  • 红宝石
  • 作为演示,我希望在Redis To Go插件中使用Heroku
  • 目前计数器是基于PG (活动记录)的。
  • Redis对象与AR一起使用来计数(但是如何保存到AR概要表?)

需求/实现的思考

  • 在Redis中计数,并定期存储到PG表,可能使用Rake +调度任务
  • 效率

问题

  • 我不知道如何查询Redis DB来查找其中的所有配置文件对象。

如果我能够得到这个对象列表,我可以编写一个rake任务来迭代每个项,并将模态值保存/更新到数据库中。

经过一些搜索后,KEYS profile:*似乎是获取保存到数据库中的所有配置文件值的唯一方法。然后,我必须手动获取对象并更新值。

问题

  1. 使用keys查找键,然后在计划的任务中使用合理的对象(就效率而言),可能每天使用一次。
  2. 是否有一种方法可以直接从Redis获取所有Profile对象,就像我们可以在ActiveRecord中执行Profile.all一样?
  3. 任何实现计数器的建议都会受到高度赞赏(即使不是基于Redis的)。

-

代码语言:javascript
复制
class Profile < ActiveRecord::Base

  # To handle the profile counter
  include Redis::Objects
  counter :tviews

  # Associations

  belongs_to  :user

  # Other attributes
end

profiles_controller.rb

代码语言:javascript
复制
class ProfilesController < ApplicationController

  def public 
    @profile.tviews.increment
    # @profile.save # Save of AR based counting
  end

end

苗条

代码语言:javascript
复制
    p.text-center#profile-counter
      | Views - 
      = @profile.tviews.value + @profile.views
EN

回答 1

Stack Overflow用户

发布于 2014-03-06 16:06:00

1)不,不是。见redis文档,它说Time complexity: O(N) with N being the number of keys in the database, under the assumption that the key names in the database and the given pattern have limited length.

不仅redis必须遍历所有的键,还必须将它们存储在内存中。另外,由于redis的单线程性质,在执行key命令时,它将没有响应。

( 2)这里不是红宝石使用者,但我假设不是。

3)你有几种选择

  • 将您的密钥的if存储在redis set中,并使用定期任务(如果需要的话)清除它(以及redis事务)。这样,你就能准确地知道哪些钥匙是红色的。
  • 使用redis2.8中的扫描命令,它只返回有限数量的键,并使用内部游标对键进行迭代。

(redis.io现在似乎正在关闭,所以链接可能无法工作)

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

https://stackoverflow.com/questions/22215053

复制
相关文章

相似问题

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