php banner队列fifo

时间:2011-09-08 13:06:54

标签: php queue fifo banner-ads

我刚刚开始在我的网站上放置广告,我希望能够将ad_a,2000到ad_b的1000个视图提供给ad_b,然后将10000视为ad_c。

如果当时只查看了一个页面,则可以轻松更新数据库并计算出每个广告需要查看的页数,但可以同时访问serval页面,这会使事情变得更加复杂。

我正在考虑写一个队列来管理它,并且请求将在数据库上逐个完成。我不确定这是不是最好的想法,从来没有做过这种编码,我正在寻找一系列行为,逻辑步骤,如果有规范,在db中创建什么样的表。

非常感谢您的帮助!

3 个答案:

答案 0 :(得分:0)

您可以使用Memcached存储当前的视图数。 Memcached快速而轻巧,您不会遇到性能问题。另外,更复杂的是拥有一个“队列”,就像你说的那样,以及一些并行的进程更新它放在那里展示的横幅,所以你可以将它们混合起来。

答案 1 :(得分:0)

一次可以多次查看一个页面的事实不一定是个问题,这就是LOCK TABLES的原因。

LOCK TABLES ads WRITE;
SELECT ad_id FROM ads WHERE ad_views_remaining > 0 LIMIT 1;
UPDATE ads SET ad_views_remaining = ad_views_remaining -1 WHERE ad_name = THAT_AD_ID_YOU_SELECTED_BEFORE;
UNLOCK TABLES;

这样,在更新之前,没有人可以阅读该表。 (这个例子适用于MySQL,我确信大多数其他RDBMS也支持锁)

答案 2 :(得分:0)

兰德怎么样?

$r = rand(1, 13);
if ( $r == 1 )
    echo 'ad_a';
if ( $r > 1 and $r < 4 )
    echo 'ad_b';
if ( $r > 3 )
    echo 'ad_c';