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

Pat*_*ick 6 php memcachedb redis

通过计数器,它可以是网页浏览量,下载量,投票数等.基本上,不是非常"关键"的数据.

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

Alf*_*red 10

我想我会选择Redis,因为:

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


kri*_*ina 9

具有upserts的MongoDB非常适合这种情况.

如果您要存储以下内容:

{ "url" : "www.example.com", "pageviews" : 0 }
Run Code Online (Sandbox Code Playgroud)

您可以使用原子操作$ inc快速原子地增加网页浏览量:

db.downloads.update({'url' : 'www.example.com'}, {'$inc' : {pageviews : 1}})
Run Code Online (Sandbox Code Playgroud)

如果使用upsert,则在更新文档之前不必检查文档是否存在.例如,如果你说:

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

如果文档不存在(页面视图设置为1),则会创建包含www.example.com网址的文档,如果确实存在,则会增加网页浏览量.这意味着您不必担心预先填充集合.