我目前正在开发一个包含视图计数器的会员网站。过去的经验表明,在SQL中使用视图计数器的成本很高。事实上,我远离观察柜台,但今天它不是一个选择。
Redis To Go
插件如果我能得到这个对象列表,我可以编写一个rake任务来遍历每个项目,并将模态值保存/更新到数据库。
经过一些搜索KEYS profile:*
似乎是将所有配置文件值保存到数据库的唯一方法。然后,我必须手动获取对象并更新值。
keys
来查找密钥,然后使用合理的(在效率方面)对象,可能每天在计划任务中使用一次。Profile
个对象,就像我们在Profile.all
中可以ActiveRecord
一样?-
class Profile < ActiveRecord::Base
# To handle the profile counter
include Redis::Objects
counter :tviews
# Associations
belongs_to :user
# Other attributes
end
profiles_controller.rb
class ProfilesController < ApplicationController
def public
@profile.tviews.increment
# @profile.save # Save of AR based counting
end
end
在SLIM中
p.text-center#profile-counter
| Views -
= @profile.tviews.value + @profile.views
答案 0 :(得分:1)
1)不,不是。见redis docs它说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的单线程特性,它对执行键命令的时间没有响应。
2)这里不是红宝石用户,但我认为不是。
3)你有几个选择
set
中,并使用您的定期任务清理它(如果需要,还可以使用redis事务)。通过这种方式,您可以确切地知道redis中的哪些键。(redis.io现在似乎已经关闭,因此链接可能无法正常工作)