Active Record用Counter Cache实现计数器

二 20th, 2012

经常会有遇到这样的场景:

统计页面的访问次数

如果每次访问时都直接update数据库,对于大并发场景效率太低。由于对事务要求并不高,如访问次数数据延迟几分钟并没有太大问题,每次都操作数据库显得有点浪费。

Rails中有ActiveRecord::CounterCache专门用于这个场景。

这个类用起来很简单,只有4个方法:

- (Object) decrement_counter(counter_name, id)
根据id找到行,然后对counter_name列减一, 一般用于计数器
- (Object) increment_counter(counter_name, id)
根据id找到行,然后对counter_name列加一,一般用于计数器
- (Object) reset_counters(id, *counters)
执行sql从数据库中重新读出一个或多个counter的值。一般用于手动修改counter值后。
- (Object) update_counters(id, counters)
A generic “counter updater” implementation, intended primarily to be used by increment_counter and decrement_counter, but which may also be useful on its own.

示例

# 对id=99的记录post_count减1
DiscussionBoard.decrement_counter(:post_count, 99)
# 对id=99的记录post_count加1
DiscussionBoard.increment_counter(:post_count, 99)  

# 对id=99的记录post_count加10,comment_count减10
Post.update_counters 99, :comment_count => -10, :action_count => 10
>>原创文章,欢迎转载。转载请注明:转载自Ruby迷,谢谢!
>>原文链接地址:Active Record用Counter Cache实现计数器
目前还没有任何评论.