PHP / MySQL:获取新条目的最佳方式?

时间:2009-07-30 12:04:42

标签: php mysql

我们的网站上有一些小组成员可以发送消息。当有新条目时,我想注意每个小组的成员。

最好的方法是什么?

3 个答案:

答案 0 :(得分:0)

如果您想立即通知他们,您可以在存储邮件时立即向他们发送电子邮件。

否则,您可以为每个用户存储最高的“读取”消息ID,然后您可以非常轻松地获取任何后续消息。

答案 1 :(得分:0)

如果每个组可能会有很多消息,而不是像LastNotificationTime那样具有组级字段,那么计划任务以查找当前LastNotificationTime值后创建时间的消息(然后将有关它们的报告发送给用户)并将LastNotificationTime更新为当前时间。

更好的是拥有用户级LastActivityTimeInGroup字段并将消息创建日期与之比较(可能会为其添加一些分钟以获得更流畅的体验),因此只有当时非活动用户才会收到任何消息,如果有的话每个任务间隔时间不超过1个。

答案 2 :(得分:0)

我目前使用密钥存储区(memcachedb)。你可以做的是添加一个键,例如'messageread_ {message.id} _ {user.id}'设置为你选择的任何值(我只​​使用int 1),然后使用memcached客户端为所有人做一个getmulti用户拥有的消息(作为上面发布的密钥数组)。读取的任何键都是:)

我将此方法与此查询本身的60秒缓存一起使用,为用户提供未读邮件计数,效果很好。

http://memcachedb.org/

我最初使用了最高级别的ID类型检查,并且在切换到多级评论系统后不久,因此在该上下文中使得最高的id没有实际意义(因为您可能最终看到评论而错过了一个回复)。到目前为止,这种方法一直很快。

要做这样的事情,你需要分别从pecl http://pecl.php.net/package/memcache和这里http://pecl.php.net/package/memcached安装memcache或memcached客户端。安装memcachedb(需要一个具有shell访问权限的盒子),并启动该服务。

客户端伪代码将运行如下:

//获取用户属于

的消息

...代码

//从该列表构建一个memcachedb键数组,将键设置为message_id以便稍后引用

$keys = array();
foreach($mresult as $current){
    $keys[$current['message_id']] = 'messageread_'.$current['message_id'].'_'.$myid;
}

//使用“memcached”php客户端

$result = $memcacheobj->getMulti($keys);

getmulti返回'memcachekey'=>结构中的关联数组'memcachevalue'

//循环结果,从键中删除找到的结果

foreach($keys as $key => $val){
    if(isset($result[$val])) unset($keys[$key]);
}

//清理以获取未读消息数组,使用flip数组将值设置为message_id,使用array_values重置数组键(可选)

$unread = array_values(array_flip($keys));

现在您在结构中有一系列未读消息:

阵列(     0 => 12,     1 => 23,     等等... )

这只是该过程的一个粗略模型,我确定可以进行一些清理来优化这个:)