在项目中需要实现一个“最近来访的功能”只需要记录最近访问的十个人。感觉记录在数据库中太亏了,想记录在每个用户的 cookie 中。不知道有没有人做过,有比较好的代码能够分享分享?
#7 楼 @tassandar 先不考虑缓存的方法 最原始的方法: user has many visitors
用户 A 来访用户 B -> 查询 B 的 visitors 数量,如果小于 10,插入一条记录到 visitors 表里面,或更新时间 如果等于 10,先删掉最后一条,再插入。
再简单一点,不用表,只用一个数组字段序列化到 user 表里面
#10 楼 @tassandar 其实,我觉得吧 上面的几种方案都是可行的。而且用数据库的方案更灵活,比如要统计最近被访问最多的人这种需求的时候也很方便做。
做这种设计的时候也要综合考虑其他因素。
如果项目里没有用到 redis mongodb 什么的还是直接用 mysql。
好像有个原则叫“如无必要,勿增实体”,在这里郑重的 at 一下蜗牛同学.. @ywencn :-)
可以把必要的信息(比如 user_id, visited_at 等)保存成 JSON 格式,放在某个字段里。然后重写一下这个字段的 writer 和 reader 方法。使用 JSON 的话,可以让其他语言也能读取。
rails 3.2 里 ActiveRecord::Store 的 store,就是把一些属性序列化后保存的。
这种需求用关系型数据库是最方便的:
class Visit
belongs_to :user
belongs_to :visitor, :class_name => "User"
end
然后写一行 filter 就搞定了
Visit.find_or_initialize_by_user_id_and_visitor_id(user, current_user.id).update_attributes(:visited_at, Time.now)