点赞收藏功能该如何设计?
这周给一个小伙伴做模拟面试,因为他在公司的项目是一个短视频+电商的项目,模仿的是微博。看到他简历里写了做了短视频的收藏功能,于是让他讲讲具体的做法是什么样子的。
结果回答的并不理想,答案里有不少硬伤,今天松哥就来和大家简单聊一聊这个话题。
一 为什么用 Redis
首先就是为什么要用 Redis?直接存到数据库不行吗?
用 Redis 主要是有下面一些优势。
1.1 高性能
因为点赞收藏是一个高频操作,所以利用 Redis 就能做到非常低的延迟和极高的吞吐量,这是一个巨大的优势。
1.2 简化架构
对于简单的点赞和收藏功能,Redis 提供了内置的数据结构(如 Hash 和 Sorted Set),这使得实现起来非常简便。你不需要编写复杂的 SQL 查询或设计复杂的索引来支持这些功能。
1.3 弹性和扩展性
Redis 支持主从复制、集群部署以及持久化机制,这使得它非常适合需要高度可用性和可扩展性的应用。即使在数据量增长的情况下,你也可以通过增加 Redis 实例来水平扩展系统。
1.4 实时数据分析
Redis 还支持实时分析和聚合功能,这对于实时展示点赞数量或热门内容非常有用。例如,你可以轻松地计算出最受欢迎的内容或用户的活动趋势。
因为这个小伙伴的项目是互联网项目,所以用 Redis 去做点赞和收藏我相信大家应该没有什么异议。
具体问题具体分析,如果就是常规的企业级系统开发,并发量不大甚至数据量也不大的话,那么也可以直接上数据库。
二 使用哪种数据结构
如果用 Redis 来实现点赞或者收藏功能的话,一般来说我们有两种数据结构可以选择:
- Hash
- Sorted Set
这两种数据结构各有特点,我们要结合具体情况来分析。
2.1 Hash
如果你的收藏功能只需要记录用户对某个项目是否收藏了,并不需要对这些收藏项进行排序,那么可以考虑使用 Hash。
可以用用户名做 key,value 则是一个 list,表示用户收藏项的 id。
使用 Hash 的优点是:
- 空间效率高,因为 Hash 可以存储多个字段值对。
- 查询单个用户的收藏状态非常快。
不过 Hash 有一个问题就是无法按收藏或者点赞时间对数据进行排序。
2.2 Sorted Set (ZSET)
如果你需要根据某个 score(例如收藏的时间戳或者其它数值指标)来给收藏的项目排序,那么就可以考虑使用 Sorted Set。
使用 Sorted Set 的话,key 依然是用户 id,value 则是收藏数据项的 id,score 则是收藏的时间戳。
这样将来在查询的时候,就可以根据时间对收藏/点赞行为进行排序。
使用 Sorted Set 的优点有:
- 可以轻松地获取用户的最近收藏、最热门收藏等。
- 支持范围查询,例如获取某个用户收藏列表中的前 N 项。
三 小结
如果你只需要记录收藏状态而不需要排序,使用 Hash 是一个简单且高效的选择。
如果你需要排序功能(例如按照时间顺序显示收藏),则使用 Sorted Set 更合适。
根据你的具体需求选择最适合的数据结构。如果需要更复杂的逻辑,也可以考虑结合使用这两种数据结构。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
开源日报 | FreeCAD发布1.0rc1;大模型幻觉无法避免实证分析;GPT-4o关键人物离职创业;“未来机器人数量将远超人类”
欢迎阅读 OSCHINA 编辑部出品的开源日报,每天更新一期。 # 2024.9.12 今日要闻 法国AI初创Mistral AI,又扔出一条磁力链炸场了 与以往不同的是,他们发布了首个多模态模型Pixtral 12B,集语言、视觉能力于一身。这意味着,Mistral AI正式跨界MMML,开启多模态AI新时代,同时向OpenAI、Anthropic等劲敌发起挑战。 多模态Pixtral 12B,是基于文本模型Nemo 12B完成训练。与GPT-4o、Claude类似,只需上传一张图、提供一个链接,模型就能根据提示回答问题。它不仅能够识别复杂手写笔记,还能看懂数学公式、图表等等。在多项基准测试(文本、指令跟随、多模态)中,新模型性能大幅超越Qwen2 7B、Phi-3 Vision开源模型。 除了大约24GB的磁力链,模型代码还可在HuggingFace、GitHub下载。(由社区开发者上传) https://huggingface.co/mistral-community/pixtral-12b-240910 开源版的CAD工具发布了1.0rc版 https://github.com...
- 下一篇
大模型能否取代程序员,写点代码试试吧
大模型代替程序员来编写代码,这是一个非常有趣的话题,也是一个非常具有挑战性的任务,因为编写代码不仅仅是逻辑的表达,还涉及到了对环墫的依赖,对资源的管理,对错误的处理等等,这些都是大模型在生成代码时需要考虑的问题,目前,大模型作为编程的辅助工具,例如 Github Copilot, 或是当红的 Cursor, 可以在块级别,函数级别,甚至是文件级别生成代码,但基本上还是需要程序员的监督,对其生成的代码进行检查,修改,完善,才能真正的投入到生产环境中。 如果想让大模型产生代码生产可用,一个可能的方法是建立低代码工具,让大模型专注于逻辑的生成,而不用考虑环境的依赖,这与给人类使用的低代码工具是类似的,相对于人类,大模型不会抱怨编写低代码的无聊和繁琐。 测试方法 为了检测大模型的编程能力,我们通过让不同的大模型模型根据相同的 prompt 来生成代码,然后运行这些代码,检测代码的运行结果是否符合预期,这个过程会重复若干次,来检测其生成的稳定性。 我们使用了 a2a 这个专为大模型定制的低代码工具,它简化了对工作环境的依赖,封装了程序对数据库、文件、网络等资源的访问,使得大模型可以专注于逻辑代码...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7设置SWAP分区,小内存服务器的救世主
- Mario游戏-低调大师作品
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- 2048小游戏-低调大师作品
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS7,CentOS8安装Elasticsearch6.8.6