用Redis咋存用户历史数据,顺便还能分析点啥和怎么用
- 问答
- 2025-12-28 16:25:20
- 5
关于用Redis存储用户历史数据,并且能分析点什么、怎么用,我们可以从一个开源的论坛软件Discourse的实际做法说起,根据其官方文档和社区讨论,Discourse把用户几乎所有的动态都记录了下来,比如看了哪些帖子、看了多久、什么时候看的、点了赞还是踩等等,它这么做不是为了简单地显示一个“最近浏览”列表,而是有更深层次的目的:为了给用户提供个性化体验和进行系统性的数据分析。
Redis是怎么存这些东西的呢?Redis很快,但它不是像MySQL那样的关系型数据库,不能存特别复杂的关系,Discourse采用了一种“化整为零”的思路,它主要使用了Redis的一种数据结构叫有序集合,你可以把有序集合想象成一个排行榜,每个成员都有一个分数,可以根据分数高低来排序。
具体到存用户历史数据,比如用户浏览帖子的历史,Discourse是这么干的:它为用户A创建一个唯一的键,比如user:A:history,这个键对应的就是一个有序集合,每当用户A浏览一个新帖子(比如帖子ID是123),系统就会执行一个操作:把成员“123”加入到有序集合user:A:history里,并且把当前的时间戳(比如1627890123)作为这个成员的分数,时间戳是一个很大的数字,代表了某个时刻,所以用时间戳作为分数,自然就按照时间先后顺序排序了,最近看的帖子分数最大,排在最前面。
因为Redis有序集合的大小是有限的,Discourse会设置一个上限,比如只保留最新的200条记录,当加入第201条时,就会把分数最小的那条(也就是最老的那条)自动踢出去,这样就实现了了一个固定长度的、按时间倒序排列的浏览历史。
存下来之后,能分析点啥呢?Discourse给出了很好的例子:

-
个性化推荐:这是最直接的应用,当用户打开首页或者相关板块时,系统可以快速地从Redis中取出这个用户最近浏览过的帖子ID集合,系统可以利用这个信息去做两件事:一是过滤掉用户已经看过的内容,避免重复推荐;二是寻找相似内容,比如找出与用户常看帖子标签相同、但用户还没看过的新帖子进行推荐,因为Redis的读取速度极快,这种实时推荐体验会非常流畅。
-
分析用户兴趣偏好:虽然单条浏览记录意义不大,但海量数据的集合就能看出趋势,通过分析一个用户历史记录中不同版块帖子ID的出现频率,或者帖子标签的分布,可以大致勾勒出这个用户的兴趣图谱,发现用户A的历史记录里80%都是“编程”相关的帖子,那么就可以把他标记为“技术爱好者”,这可以用来做更精细的用户分群,比如给技术爱好者推送内测的新开发工具。
-
计算热门内容和趋势:这个分析需要聚合所有用户的数据,系统可以定期(比如每隔一小时)跑一个任务,扫描所有用户的历史记录有序集合(键的模式类似
user:*:history),统计在最近一段时间内(比如过去24小时),哪些帖子ID在不同的用户集合中出现的次数最多,这样就能实时地计算出一个“24小时热门内容”榜单,这比传统数据库通过计数查询要高效得多。
-
评估用户活跃度和留存:通过检查用户历史记录的更新频率,可以很容易地判断用户的活跃情况,如果一个用户的浏览历史在过去一周都没有任何更新,那他很可能已经流失了,反之,如果一个用户每天都有稳定的浏览记录,那就是一个活跃用户,这种数据对于社区运营者了解用户粘性、评估活动效果至关重要。
具体怎么用这些数据呢?除了上面提到的实时推荐,还可以:
- 在用户界面直接显示:比如在网站侧边栏显示“您最近浏览过的主题”。
- 触发特定操作:比如检测到用户反复查看某个疑难问题的帖子多次,系统可以自动发送一条消息,询问是否需要联系客服或将该帖子加入收藏夹。
- 数据导出与深度分析:可以将Redis中的历史数据定期导出到更擅长复杂分析的数据仓库(如Hadoop或Spark)中,进行更长期的、跨度的用户行为分析,比如用户生命周期价值预测、用户路径分析等。
用Redis存用户历史数据的核心优势是速度快和数据结构适合,通过使用有序集合,可以轻松实现按时间排序和容量控制,而分析的价值则体现在实时个性化、用户画像、内容运营和活跃度监控等多个方面,让数据不仅被记录下来,更能直接驱动产品变得更好用、更智能,这种思路不仅限于论坛,对于电商(浏览商品历史)、新闻资讯App(阅读文章历史)等场景都非常适用。
(主要参考思路来源于Discourse开源项目的相关文档和开发者讨论)
本文由酒紫萱于2025-12-28发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:http://www.haoid.cn/wenda/70129.html
