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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/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
使用redis存储视图_Redis - Fatal编程技术网

使用redis存储视图

使用redis存储视图,redis,Redis,我有一个想法,在我的网站上存储帖子的浏览量,但我很难使用哪些方法以及如何设计它。我的用户发布了很多小帖子,所以会有很多独特的帖子 我的要求如下: //Run this every 30 minutes loop through smembers(post:tracking).For each post do{ //Get number of views for this post: var cnt = SCARD("post:@postId:uniques")

我有一个想法,在我的网站上存储帖子的浏览量,但我很难使用哪些方法以及如何设计它。我的用户发布了很多小帖子,所以会有很多独特的帖子

我的要求如下:

//Run this every 30 minutes
loop through smembers(post:tracking).For each post do{
      //Get number of views for this post:
        var cnt = SCARD("post:@postId:uniques")
       //post to database new count
}
  • 帖子存储在Mysql云数据库中。我需要定期从Redis中提取数据,用 观点

  • 我不关心精确性,显示的视图可能会少一点(比实际值少约10%是可以接受的)

  • 就准确性而言,视图不必是实时的。对于较新的帖子,我希望它们每30分钟更新一次 以前的帖子(超过一周)我可以每天更新一次视图

  • 理想情况下,每个视图都是唯一的(基于用户),因此每个视图都将被视为该用户查看了一次帖子。用户不能多次查看帖子。这将是理想的,但我必须存储每个用户在应用程序生命周期中创建的每个视图,并始终检查用户是否已经查看了此帖子,这是不可行的。因此,我希望视图在有限的时间内对用户是唯一的。因此,如果有一篇新文章发表,Bob查看它,这将被视为1个视图。如果他在10分钟内再次查看,计数仍将与之前的1相同。如果Bob在1小时内再次查看,这将被视为新视图。如果这篇文章超过一周,那么Bob的观点只有在他每天观点超过一次时才算有效

流伪代码:

//Page view comes to server, lets add the unique postId. 

//Using SADD because it will not insert a key that already exists. Not sure of the difference between sadd and pfadd?
sadd "post:tracking", @post.id

//Add the unique user who viewed this page
sadd "post:#{@post.id}:uniques", @userId
然后,我运行一个cronjob,它将执行以下操作:

//Run this every 30 minutes
loop through smembers(post:tracking).For each post do{
      //Get number of views for this post:
        var cnt = SCARD("post:@postId:uniques")
       //post to database new count
}
每隔30分钟,它将循环遍历所有集合(post),获取该集合中成员的基数(count),并更新Mysql数据库。这里有一个问题,那就是我没有区分新帖子(不超过1周)和旧帖子(超过1周)。在我的示例中,不包括创建帖子的时间,因为我不确定将这些信息存储在何处,这正是我寻求帮助的原因。我正在考虑提高效率。

你看过吗。它们非常高效地存储独特的东西(查看器),具有相当高的准确性(约1%)。你可以让他们继续运行,并每小时/天/周从他们那里获取统计数据,以获得总体观众数字