English 中文(简体)
PHP - Redis/Memcachedb/Mongodb or other persistent storage to store counter
原标题:

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?

最佳回答

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).
问题回答

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.

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.

I would say APC or memcached are good choices.





相关问题
Brute-force/DoS prevention in PHP [closed]

I am trying to write a script to prevent brute-force login attempts in a website I m building. The logic goes something like this: User sends login information. Check if username and password is ...

please can anyone check this while loop and if condition

<?php $con=mysql_connect("localhost","mts","mts"); if(!con) { die( unable to connect . mysql_error()); } mysql_select_db("mts",$con); /* date_default_timezone_set ("Asia/Calcutta"); $date = ...

定值美元

如何确认来自正确来源的数字。

Generating a drop down list of timezones with PHP

Most sites need some way to show the dates on the site in the users preferred timezone. Below are two lists that I found and then one method using the built in PHP DateTime class in PHP 5. I need ...

Text as watermarking in PHP

I want to create text as a watermark for an image. the water mark should have the following properties front: Impact color: white opacity: 31% Font style: regular, bold Bevel and Emboss size: 30 ...

How does php cast boolean variables?

How does php cast boolean variables? I was trying to save a boolean value to an array: $result["Users"]["is_login"] = true; but when I use debug the is_login value is blank. and when I do ...

热门标签