带有Rails和Memcached的页面视图计数器

时间:2010-02-26 17:09:23

标签: ruby-on-rails memcached

我正在尝试使用Rails和memcached实现页面视图计数器。每次我渲染页面时,通过rails我都会增加一个memcached键(key.incr是原子的)。我主要担心的是在更新我的数据库记录之前,此密钥在memcached中过期或删除的可能性。即使我访问频率大于其到期时间的所有密钥,memcached也可能因为内存已满而同时删除密钥。

有什么建议吗? 谢谢 迪米瑞斯

2 个答案:

答案 0 :(得分:5)

我会将redis作为memcached replacement。这是perfect for realtime stats。它为您提供所需的速度和原子增量,并且它会持续存在。问题解决了。

答案 1 :(得分:1)

如果您希望该数据具有持久性,则不得将其写入memcache (这是一种缓存机制,而不是数据持久性存储)

基本上,我可能会做的就是这样:

  • 尝试获取页面的计数器时:
    • 检查它是否存储在memcache中
      • 如果是,请使用
      • 如果没有,请从数据库中获取并将其存储到memcache
  • 当试图写一个计数器(即计数器+ = 1)时:
    • 将数据写入数据库(update ... set counter = counter + 1 where...
    • 从数据库中选择数据;在事务中包装更新和选择可能有所帮助:隔离是数据库运行良好的东西。
      • 并立即将其写入内存缓存,因此下一次“获取”操作是最新的


但我不会将memcache用于持久性:

  • 我永远不会向memcache写任何尚未写入数据库的数据
  • persistance是数据库的工作;不是缓存引擎。