PHP - Redis/Memcachedb/Mongodb 或其他持久存储来存储计数器

发布于 2024-08-17 12:09:13 字数 95 浏览 10 评论 0原文

通过计数器,它可以是浏览量、下载量、投票数等。基本上,不是非常“关键”的数据。

存储这些信息的“最佳”方式是什么? Mysql 不是一个好的选择。你们都用什么?

By counter it could be pageviews, downloads, number of votes etc. Basically, not very 'critical' data.

What is the 'best' way to store those information? Mysql is not a good option. What do you guys use?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

少女情怀诗 2024-08-24 12:09:13

我想我会选择 Redis,因为:

  • Antirediz(他的昵称)确实在积极开发 Redis。 (每次当我查看我的 github 仪表板时,他都会提交一些新代码)。他现在正在全职开发 Redis,感谢 VMware
  • Redis 最终持久的,所以性能非常好(首先只使用速度很快的内存)。
  • Redis 有一个您需要的原子增量操作。
  • Redis 有很多优秀的 PHP 库。还有一个被编写为 C 扩展,因此它具有非常好的性能。 Redis 网站 也提供了这些扩展的概述。有些是纯 PHP 代码(运行速度稍慢,但更容易配置)。

I think I would go with Redis, because:

  • Antirediz(his nickname) is really actively developing Redis. (Every time when I look at my github dashboard he has commited some new code). He now is developing redis fulltime thanks to VMware
  • Redis is eventually persistent so the performance is kickass (first only uses memory which is fast).
  • Redis has an atomic increment operation which you need.
  • Redis has a a lot good PHP libraries. There is also one which is written as a C extension so it has really good performance. Redis website also has an overview off these extensions. Some are pure PHP code (run a litle but slower, but are easier to configure).
峩卟喜欢 2024-08-24 12:09:13

带有 upserts 的 MongoDB 非常适合这个。

如果您要存储类似的内容:

{ "url" : "www.example.com", "pageviews" : 0 }

您可以使用原子操作 $inc 非常快速地自动增加页面浏览量:

db.downloads.update({'url' : 'www.example.com'}, {'$inc' : {pageviews : 1}})

如果您使用 upsert,则无需在更新文档之前检查文档是否存在。例如,如果您说:

db.downloads.update({'url' : 'www.example.com'}, {'$inc' : {pageviews : 1}}, {"upsert" : true})

如果 URL 为 www.example.com 的文档不存在,则将创建该文档(页面浏览量设置为 1),或者如果存在,则页面浏览量将增加。这意味着您不必担心预填充集合。

MongoDB with upserts is great for this.

If you're storing something like:

{ "url" : "www.example.com", "pageviews" : 0 }

you can atomically increment pageviews really quickly with the atomic operation $inc:

db.downloads.update({'url' : 'www.example.com'}, {'$inc' : {pageviews : 1}})

If you use upserts, you don't have to check whether a document exists before updating it. For example, if you say:

db.downloads.update({'url' : 'www.example.com'}, {'$inc' : {pageviews : 1}}, {"upsert" : true})

the document with the url www.example.com will be created if it doesn't exist (with pageviews set to 1) or, if it does exist, pageviews will be incremented. This means you don't have to worry about pre-populating the collection.

甜扑 2024-08-24 12:09:13

20 世纪 90 年代著名的查看计数器使用简单的文件来存储数字。如果您只需要存储一个数字,那么任何东西都足够了。

The famous view counters of the 1990s used simple files to store the number. If all you need is just to store one number, anything is good enough.

久隐师 2024-08-24 12:09:13

我认为 APC 或 memcached 是不错的选择。

I would say APC or memcached are good choices.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文