有一个用户会话的统计问题,想咨询一下各位老哥。

2021-05-12 16:12:09 +08:00
 codingbody

基本情况如下:

我有两个接口:

  1. 客户端先请求 config 接口,config 会返回当前服务器时间戳 timestampsessionid;

  2. 客户端再请求一次或多次 upload 接口,请求的参数有 config 接口返回的 timestampsessionid.

我需要每隔 5min 统计 sessionid 持续时间在 30min 内的数量。

意思是某个 sessonid 如:s1 持续时间在 30min 内算一次,在 60min 内算两次。

我现在有一个方案是: 对每一个 upload 请求的 sessionid 做为 redis 的 key,setNX,TTL 为 30min, 如果设置成功计数器 +1,5min 后,计数器置 0 。

这个方案的问题是,同一时刻有大量的 redis key 过期,想请教老哥们有没有好的解决方案。

661 次点击
所在节点    问与答
4 条回复
RLinux
2021-05-13 09:58:26 +08:00
你说的我有点疑问:假设 30 分钟内算一次,那用户持续操作了 90 分钟,那就算三次。但你的业务说,用户会话统计,按我的理解,同个人只能算一次。
用 redis 来存储,每访问一次更新一次 key 的存活时间。查询时,只有查这种类型 key 的数量就行了。如果你用户数量大并且存在峰值涌入的话,的确会有可能存在大量同时过期。仅仅是统计 不包括用户数据的话,试试内存存储来解决?
codingbody
2021-05-13 16:07:00 +08:00
一个 session 持续了 90 min,算三次。业务上是按这个次数计费的,每个 session 每过 30min 就算一个计费单位。
codingbody
2021-05-13 16:07:57 +08:00
RLinux
2021-05-15 10:49:25 +08:00
@codingbody 如果是收费的话 那就能理解为啥这样做了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/776514

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX