如何用PHP结合Redis计数和数据库实现文章点赞功能?
- 内容介绍
- 文章标签
- 相关推荐
本文共计833个文字,预计阅读时间需要4分钟。
直接说结论:
Redis 用什么结构存点赞数和用户状态
两个 key 分开管,别塞进一个 Hash 里硬扛所有逻辑:
-
article:like_count:{article_id}:用INCR/DECR做原子计数,类型是 String。这是你前端显示的“XX 人点赞”来源,快且线程安全 -
article:liked_by:{article_id}:用 Redis Set 存已点赞的user_id,比如SADD article:liked_by:123 456。查“我点没点”就SISMEMBER article:liked_by:123 456,O(1) 响应
不用 Hash 存状态,是因为 Hash 的 field 不能做成员存在性判断(HGET 返回 null 不代表没点过,可能是点过又取消),而 Set 天然支持 SISMEMBER + SREM + SCARD,语义清晰、操作原子。
本文共计833个文字,预计阅读时间需要4分钟。
直接说结论:
Redis 用什么结构存点赞数和用户状态
两个 key 分开管,别塞进一个 Hash 里硬扛所有逻辑:
-
article:like_count:{article_id}:用INCR/DECR做原子计数,类型是 String。这是你前端显示的“XX 人点赞”来源,快且线程安全 -
article:liked_by:{article_id}:用 Redis Set 存已点赞的user_id,比如SADD article:liked_by:123 456。查“我点没点”就SISMEMBER article:liked_by:123 456,O(1) 响应
不用 Hash 存状态,是因为 Hash 的 field 不能做成员存在性判断(HGET 返回 null 不代表没点过,可能是点过又取消),而 Set 天然支持 SISMEMBER + SREM + SCARD,语义清晰、操作原子。

