如何用PHP结合Redis计数和数据库实现文章点赞功能?

2026-05-08 04:073阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计833个文字,预计阅读时间需要4分钟。

如何用PHP结合Redis计数和数据库实现文章点赞功能?

直接说结论:

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,语义清晰、操作原子。

阅读全文
标签:PHPRedisred

本文共计833个文字,预计阅读时间需要4分钟。

如何用PHP结合Redis计数和数据库实现文章点赞功能?

直接说结论:

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,语义清晰、操作原子。

阅读全文
标签:PHPRedisred