Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有唯一当前查看器的PHP Redis(predis)计数器_Php_Redis_Counter - Fatal编程技术网

具有唯一当前查看器的PHP Redis(predis)计数器

具有唯一当前查看器的PHP Redis(predis)计数器,php,redis,counter,Php,Redis,Counter,我想知道如何实现一个独特的访客计数器使用超时1小时。我有一个小小的网店,我想展示一下目前有多少人在看一篇文章。最好的办法是什么?我正在使用 谢谢你的帮助,你需要做两件事: 为每个访问者(他们)生成唯一的ID 使用RedisSET或ZSET存储这些ID并添加过期机制 方法#1:SET+SCARD+EXPIRE 解决方案 设置的名称可能类似于[article\u id]:[current\u hour\u timestamp],每次在其中添加访客id时,执行过期操作。每一套都会在一段时间后过期

我想知道如何实现一个独特的访客计数器使用超时1小时。我有一个小小的网店,我想展示一下目前有多少人在看一篇文章。最好的办法是什么?我正在使用


谢谢你的帮助,你需要做两件事:

  • 为每个访问者(他们)生成唯一的ID
  • 使用Redis
    SET
    ZSET
    存储这些ID并添加过期机制
方法#1:SET+SCARD+EXPIRE 解决方案

设置的名称可能类似于
[article\u id]:[current\u hour\u timestamp]
,每次
在其中添加访客id时,执行
过期操作。每一套都会在一段时间后过期

使用
SCARD[article\u id]:[current\u hour\u timestamp]
了解有多少访问者在线

注释

密钥可以是
[article\u id]:[current\u hour\u timestamp]
或类似
articles:[article\u id]:阅读器:[current\u hour\u timestamp]
,如果您愿意的话

在每一个小时开始时,设置将是空的,这不是您可能想要的

方法2:ZSET+ZCARD+cron 解决方案

每次访问者阅读打开一篇文章并发送
ZADD[article\u id]:readers[expiration\u time][visitor\u id]
,重新加载页面并不重要,只会更新
expiration\u time

<代码> ExviyTime是我们认为访问者离开文章时的时间戳。

将cron设置为每小时运行一次:

Retrieve all article ids in databases
For each article
 Send a `zremrangebyscore "article.id:readers" -inf [current_timestamp]` to remove expired visitors_id
最后,要检索当前的读卡器计数,请运行ZCARD[article\u id]:readers

注意

这种方法更好,因为它使用了一个滑动窗口,所以你不会在每一个新的小时都有“0阅读器”的效果。然而,缺点是您需要循环查看所有的文章id,这可能是一个问题

方法#3:ZSET+ZCARD+ZSET-as-index+cron 解决方案

与方法2相同,但是此方法使用另一个zset
articles:readers:zset
,其中包含最近更新的所有zset键

然后,您必须循环使用此zset成员,而不是所有的项目ID

注意

如果你这样做了,别忘了从
文章:readers:zset
中删除过期成员