- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
最佳答案
你需要做两件事:
SET
或 ZSET
来存储这些 ID 并添加过期机制。解决方案
SET 名称可能类似于 [article_id]:[current_hour_timestamp]
,每次您在其中SADD
访问者 id 时,执行 EXPIRE
。每套将在一定时间后过期。
使用 SCARD [article_id]:[current_hour_timestamp]
了解有多少访客在线
注意事项
键可以是 [article_id]:[current_hour_timestamp]
或任何类似 articles:[article_id]:readers:[current_hour_timestamp]
的东西,如果你愿意...
在每个小时开始时,SET 将是空的,这不是您想要的。
解决方案
每次访问者阅读打开文章时发送一个ZADD [article_id]:readers [expiry_time] [visitor_id]
,如果它重新加载页面并不重要,expiry_time
将被更新。
expiry_time
是我们认为访问者已离开文章的 future 时间戳。
设置一个 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_id]:readers
。
注意
这种方法要好得多,因为它使用了一个滑动窗口,因此您不会在每个新的时间都出现“0 位读者”的情况。然而,缺点是您需要遍历所有文章 ID,这可能是个问题。
解决方案
与方法 #2 相同,但是此方法使用另一个 zset articles:readers:zset
,其中包含最近更新的所有 zset key 。
然后您将必须遍历此 zset 成员而不是所有文章 ID。
注意
如果你这样做,不要忘记从 articles:readers:zset
中删除过期成员!
关于PHP Redis (predis) 计数器与唯一的当前观众,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22597751/
有没有人能够使用 API 设置谁可以在 YouTube 上观看私有(private)视频? 最佳答案 API 不是为此而设计的,因此要么非常困难,要么不可能。 您只能与 25 位 friend 分享私
我在 ASP.NET Core 3.1 项目上有以下 Identity Server 4 配置: services .AddIdentityServer(y => { y.Events.R
我是一名优秀的程序员,十分优秀!