我目前正在开发一个包含查看计数器的会员网站。过去的经验表明,在 SQL 中使用视图计数器的成本很高。事实上,我远离查看柜台,但今天它不是一个选择。
该项目使用
- 导轨 4.0.2
- Redis 对象宝石
- 为了演示,我希望将 Heroku 与
Redis To Go
插件一起使用 - 目前该计数器基于 PG ( Active Record )
- Redis 对象已与 AR 一起使用来计数(但如何保存到 AR 配置文件表?)
需要/想实现
- 在 Redis 中计数并定期存储到 PG 表中,可能使用 Rake + schedule 任务
- 效率
问题
- 我不知道如何查询 Redis DB 以查找其中的所有 Profile 对象。
如果我能得到这个对象列表,我可以编写一个 rake 任务来遍历每个项目并将模态值保存/更新到数据库。
经过一番搜索KEYS profile:*
似乎是将所有配置文件值保存到数据库的唯一方法。然后我必须从中手动获取对象并更新值。
问题
- 用于
keys
查找密钥,然后是合理的对象(就效率而言),以便在计划任务中使用,可能每天一次。 - 有没有办法
Profile
像我们一样直接从 Redis 数据库Profile.all
中获取所有对象ActiveRecord
? - 非常感谢任何实施计数器的建议(即使不是基于 Redis 的)
-
class Profile < ActiveRecord::Base
# To handle the profile counter
include Redis::Objects
counter :tviews
# Associations
belongs_to :user
# Other attributes
end
profile_controller.rb
class ProfilesController < ApplicationController
def public
@profile.tviews.increment
# @profile.save # Save of AR based counting
end
end
在苗条
p.text-center#profile-counter
| Views -
= @profile.tviews.value + @profile.views